#include #define MAXN 10000001 #define int long long using namespace std; int n, mn[MAXN]; long long m, answer, INF = 100000000000000001LL; long long arr[MAXN], t[4 * MAXN]; void read() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); freopen("note2.in", "r", stdin); freopen("note2.out", "w", stdout); cin>>n>>m; for(int i = 0; i < n; i ++) { cin>>arr[i]; } } void build(int v, int l, int r) { if (l == r) { t[v] = arr[l]; return; } int mid = (l + r) / 2; build(2 * v + 1, l, mid); build(2 * v + 2, mid + 1, r); t[v] = t[2 * v + 1] & t[2 * v + 2]; } int query(int v, int L, int R, int l, int r) { if (L >= l && R <= r) { return t[v]; } if (L > r || l > R) return INF; int mid = (L + R) / 2; int q1 = query(2 * v + 1, L, mid, l, r); int q2 = query(2 * v + 2, mid + 1, R, l, r); if(q1 == INF) return q2; if(q2 == INF) return q1; return q1 & q2; } signed main() { read(); build(0, 0, n - 1); int res, l = 0, r = 0; for (int i = 0; i < n; i++) { if(arr[i] < m) continue; l = i; r = max(l, r); if(l == r) res = arr[l]; else res = query(0, 0, n - 1, l, r); while(r < n - 1 && (res & arr[r + 1]) >= m) { r ++; res &= arr[r]; } answer += (r - l + 1); } cout<