#include # define clr(x,a) memset(x,a,sizeof(x)) # define all(a) a.begin(), a.end() # define deb(x) cout<<#x<<"=="<>t; while(t--) # define rev(s) reverse(s.begin(),s.end()) # define linija cout<<"___________\n"; using namespace std; typedef long long ll; typedef vector vi; typedef pair pii; const int mxN=1000006, mxM=5005, LOG=25, inf = 2e9; const long long mod=1e9+7; template T nzd(T a, T b){if(b==0) return a;else return nzd(b, a%b);} template T nzs(T a, T b){return(a*(b/nzd(a,b)));} template T stepenuj(T e, T n){T x=1,p=e;while(n){if(n&1)x=(x*p)%mod;p=(p*p)%mod;n>>=1;}return x;} template inline T na2(T x){return x*x;} const int MXBUFFer = 64009000; int n, ps[65][mxN]; ll m, a[mxN], res; char *pos, BUFFER[MXBUFFer]; ///fread char buffer inline int getint() { char C; while ((C = *pos++) < '0'); int RET = C -= '0'; while ((C = *pos++) >= '0') RET = 10 * RET + C - '0'; return RET; } inline ll getll(){ char C; while ((C = *pos++) < '0'); ll RET = C -= '0'; while ((C = *pos++) >= '0') RET = 10 * RET + C - '0'; return RET; } void make_ps(){ for(ll i = 0; i < 60; i++){ for(int j = 1; j <= n; j++){ if((1LL< n) r = n; sve = andi(l, r); //cout << "od " << l << ", " << r << " sve == " << sve << endl; if(sve < m){ l++; r++; //cout << endl; continue; } while(sve >= m){ r++; sve = (sve & a[r]); } r--; //cout << "novo l, r " << l << " " << r << endl; res += r-l+1; if(l == r){ r++; } l++; //cout << endl; } } void brute(){ res = 0; for(int i = 1; i <= n; i++){ for(int j = i; j <= n; j++){ if(andi(i, j) >= m){ //cout << i << " " << j << endl; res++; } } } cout << res << endl; } int main(){ freopen("note2.in", "r", stdin); fread(pos = BUFFER, 1, MXBUFFer, stdin); n = getint(); m = getll(); for(int i = 1; i <= n; i++){ a[i] = getll(); } make_ps(); two_pointers(); //cout << res << endl; //brute(); freopen("note2.out", "w", stdout); cout << res << endl; return 0; }