#include <bits/stdc++.h> using namespace std; //#define int long long #define rep(i, a, b) for (int i=a;i<(b); ++i) #define all(x) begin(x), end(x) #define sz(x) (int)(x).size() typedef long long ll; typedef pair<int, int> pii; typedef vector<int> vi; typedef vector <vi> vvi; auto MMM = numeric_limits<int>::max(); signed main() { cin.tie(0)->sync_with_stdio(0); int N, K; cin >> N >> K; vi C(N); for(int i = 0; i < N; i++) cin >> C[i]; vi powers(32); for(int i =0; i < 32; i++) powers[i] = 1 << i; map<int, vi> look_f; set<int> pos, neg; for(auto power: powers) { look_f[power] = vi(N); if(K & power) pos.insert(power); else neg.insert(power); } map<int, int> last_seen; for(auto power: powers) last_seen[power] = pos.contains(power) ? MMM : MMM; for(int idx = N-1; idx >= 0; idx--) { auto curr = C[idx]; for(auto power: powers) { if(curr & power) last_seen[power] = idx; look_f[power][idx] = last_seen[power]; } } int res = 0; for(int start = 0; start < N; start++) { auto min_end = start; for(auto p: pos) { min_end = max(min_end, look_f[p][start]); } auto max_end = N; for(auto n : neg) { max_end = min(max_end, look_f[n][start]); } if(min_end < max_end) res += max_end - min_end; } cout << res << endl; }