#include #define ll long long using namespace std; const int MAXN = 1e6 + 5; int N, K; ll A[MAXN], SPT[20][MAXN], sol, M; void PreCalc() { for(int x = 1; x < N; x *= 2) K++; for(int i = 1; i <= K; i++) for(int j = 1; j + (1 << i) - 1 <= N; j++) SPT[i][j] = (SPT[i - 1][j] & SPT[i - 1][j + (1 << (i - 1))]); } ll Get(int l, int r) { int k = 1; while((1 << k) < r - l + 1) k++; k--; return SPT[k][l] & SPT[k][r - (1 << k) + 1]; } int BT(int l) { int L = l; int R = N; int ret = 0; while(L <= R) { int S = (L + R) / 2; // cout << Get(l, S) << "\n"; if(Get(l, S) >= M) { ret = S; L = S + 1; } else R = S - 1; } return ret; } int main() { freopen("note2.in", "r", stdin); scanf("%d %lld", &N, &M); for(int i = 1; i <= N; i++) { scanf("%lld", &A[i]); SPT[0][i] = A[i]; } PreCalc(); // for(int i = 0; i <= K; i++) // for(int j = 1; j <= N; j++) // printf("%d%c", SPT[i][j], (" \n")[j == N]); for(int i = 1; i <= N; i++) { int idx = BT(i); if(idx) sol += idx - i + 1; } freopen("note2.out", "w", stdout); printf("%lld\n", sol); }