#include #define eb emplace_back using namespace std; using ll = long long; ll n,b,a[200000],d,g[60][60]; int main(){ cin >> n >> b; for(int i = 0; i < n; i++) cin >> a[i]; for(int i = 60; i >= 0; i--){ if((1ll << i) & b){ d = i; break; } } vector eq,low; for(int i = 0; i < n; i++){ int tmp = 0; for(int j = 60; j >= 0; j--){ if((1ll << j) & a[i]){ tmp = j; break; } } if(tmp == d){ eq.eb(a[i]); } if(tmp < d){ low.eb(a[i]); } } for(int i = 0; i < d; i++){ for(int j = 0; j < d; j++) g[i][j] = 1; } for(int i = 0; i < low.size(); i++){ b ^= low[i]; int tmp = 0; for(int j = 60; j >= 0; j--){ if(low[i] & (1ll << j)){ tmp = j; break; } } for(int j = 0; j < tmp; j++){ if(~low[i] >> j & 1){ g[j][tmp] = 1; } } } for(int k = 0; k < d; k++){ for(int i = 0; i < d; i++){ for(int j = 0; j < d; j++){ g[i][j] |= (g[i][k] & g[k][j]); } } } for(int i = 0; i < eq.size(); i++){ if((b ^ eq[i]) == 0){ cout << low.size() + 1; return 0; } ll tmp = b ^eq[i],e = 0; for(int j = 60; j >= 0; j--){ if((tmp & (1ll << j))){ e = j; break; } } for(int j = e; j < d; j++){ if(~eq[i]>>j&1&g[e][j] ){ cout << low.size() + 1; return 0; } } } cout << low.size() << endl; }