#include //#include //#pragma GCC optimize("Ofast") using namespace std; #define reps(i,s,n) for(int i = s; i < n; i++) #define rep(i,n) reps(i,0,n) #define Rreps(i,n,e) for(int i = n - 1; i >= e; --i) #define Rrep(i,n) Rreps(i,n,0) #define ALL(a) a.begin(), a.end() #define fi first #define se second using ll = long long; using vec = vector; using mat = vector; ll N,M,H,W,Q,K,A,B; string S; typedef pair P; const ll INF = (1LL<<58); ll res(0); void make_sum(vec &v, ll &sum, vec &bit_num){ for(ll u : v){ sum += u; rep(i, 18) if((u>>i)&1) ++bit_num[i]; } } ll calc(bool one, vec &a, vec &b){ ll sum_a(0), sum_b(0); vec bita(18, 0), bitb(18, 0); make_sum(a, sum_a, bita); /* cout<>bit)&1) c.push_back(u); else d.push_back(u); } if((K>>bit)&1){ res += calc(true, c, bla) + calc(true, d, bla); dfs(false, bit - 1, c, d); }else{ dfs(true, bit - 1, c, bla); dfs(true, bit - 1, d, bla); } }else{ vec az(0), ao(0), bz(0), bo(0); for(ll u : a){ if((u>>bit)&1) ao.push_back(u); else az.push_back(u); } for(ll u : b){ if((u>>bit)&1) bo.push_back(u); else bz.push_back(u); } if((K>>bit)&1){ res += calc(false, az, bz) + calc(false, ao, bo); dfs(false, bit - 1, az, bo); dfs(false, bit - 1, ao, bz); }else{ dfs(false, bit - 1, az, bz); dfs(false, bit - 1, ao, bo); } } } int main() { cin>>N>>K; vec a(N), b(0); rep(i, N) cin>>a[i]; if(K == (1LL<<18)){ cout<