#include using namespace std; ifstream fin("note2.in"); ofstream fout("note2.out"); const int nmax = 1e6; const int lgmax = 19; int n; long long m; long long a[nmax + 5]; long long rmq[lgmax + 1][nmax + 5]; int lg[nmax + 5]{ -1 }; long long get(int l, int r) { int p = lg[r - l + 1]; return rmq[p][l] & rmq[p][r - (1 << p) + 1]; } int main() { ios::sync_with_stdio(0); cin.tie(0); fin >> n >> m; for (int i = 1; i <= n; ++i) { fin >> a[i]; rmq[0][i] = a[i]; lg[i] = lg[i >> 1] + 1; } for (int p = 1; (1 << p) <= n; ++p) { for (int i = 1; i <= n - (1 << p) + 1; ++i) { rmq[p][i] = rmq[p - 1][i] & rmq[p - 1][i + (1 << (p - 1))]; } } long long answer = 0; for (int l = 1; l <= n; ++l) { int st = l, dr = n, r = l - 1; while (st <= dr) { int mid = (st + dr) / 2; if (get(l, mid) >= m) { r = mid, st = mid + 1; } else { dr = mid - 1; } } answer += r - l + 1; } fout << answer; }