#include #define endl '\n' using namespace std; typedef long long ll; const int MAXN = 1e6 + 10; const ll INF = (1LL << 60) - 1LL; ll tree[4 * MAXN]; ll n, m; ll a[MAXN]; void build(int left, int right, int idx) { if(left == right) { tree[idx] = a[left]; return; } int mid = left + (right - left) / 2; build(left, mid, 2 * idx);; build(mid + 1, right, 2 * idx + 1); tree[idx] = tree[2 * idx] & tree[2 * idx + 1]; } ll query(int left, int right, int idx, int qleft, int qright) { if(right < qleft || qright < left) return INF; if(qleft <= left && right <= qright) { return tree[idx]; } int mid = left + (right - left) / 2; return query(left, mid, 2 * idx, qleft, qright) & query(mid + 1, right, 2 * idx + 1, qleft, qright); } void read() { cin >> n >> m; for(int i = 1; i <= n; i++) { cin >> a[i]; } build(1, n, 1); } void solve() { ll ans = 0; ll right = 0; for(ll left = 1; left <= n; left++) { while(right + 1 <= n && query(1, n, 1, left, right + 1) >= m) { right++; } if(left <= right) ans = ans + (right - left + 1); } cout << ans << endl; } int main() { #ifdef ONLINE_JUDGE freopen("note2.in", "r", stdin); freopen("note2.out", "w", stdout); #endif ios_base :: sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); read(); solve(); return 0; }