#include #define endl '\n' using namespace std; const int MAXN = 1e6 + 15; void speed() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); } int n; long long m; long long a[MAXN]; int greatest; void read() { cin >> n >> m; for (int i = 1; i <= n; ++ i) cin >> a[i]; } int last[63][MAXN]; long long step[63]; void fill_step() { step[0] = 1; for (int i = 1; i <= 61; ++ i) step[i] = step[i-1] * 2; } void pre(long long bit) { int val = 0; for (int i = 1; i <= n; ++ i) { if(!(step[bit] & a[i])) val = i; last[bit][i] = val; } } bool calc(int l, int r) { for (int bit = 61; bit >= 0; -- bit) { if((step[bit] & m) && last[bit][r] >= l)return false; else if(!(step[bit] & m) && last[bit][r] < l)return true; } return true; } int main() { speed(); freopen("note2.in", "r", stdin); freopen("note2.out", "w", stdout); read(); fill_step(); for (int i = 61; i >= 0; -- i) { if((step[i] & m)) { greatest = i; break; } } for (int i = 61; i >= 0; -- i) { if((step[i] & m)) { greatest = i; break; } } for (int i = 0; i <= 61; ++ i) pre(i); long long result = 0; int goo = 0; for (int i = 1; i <= n; ++ i) { long long ans = i+1; for (int bit = 61; bit > greatest; -- bit) { ans = min(ans, 1LL * last[bit][i] + 1); } long long eq = 1, buff = i+1; for (int bit = greatest; bit >= 0; -- bit) { if(!(step[bit] & m)) { buff = min(buff, 1ll * last[bit][i] + 1); continue; } eq = max(eq, min(1ll *last[bit][i] + 1, buff)); // buff = i + 1; } ans = min(ans, eq); // cout << i << " " << ans << endl; result += max(1LL * 0, (i - ans + 1)); } cout << result << endl; return 0; }