#include #include #include using namespace atcoder; using mint = modint998244353; using namespace std; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf 100000000000000000 //Xor template void fwt(vector& f) { int n = f.size(); for (int i = 1; i < n; i <<= 1) { for (int j = 0; j < n; j++) { if ((j & i) == 0) { T x = f[j], y = f[j | i]; f[j] = x + y, f[j | i] = x - y; } } } } template void ifwt(vector& f) { int n = f.size(); for (int i = 1; i < n; i <<= 1) { for (int j = 0; j < n; j++) { if ((j & i) == 0) { T x = f[j], y = f[j | i]; f[j] = (x + y) / 2, f[j | i] = (x - y) / 2; } } } } long long get(vector a,long long X){ vector dp(1<<18,0); rep(i,a.size())dp[a[i]]++; fwt(dp); rep(i,dp.size())dp[i] *= dp[i]; ifwt(dp); long long ret = 0LL; rep(i,X){ ret += dp[i]; } ret -= a.size(); ret /= 2; return ret; } int main(){ int N,X; cin>>N>>X; vector a(N); rep(i,N){ scanf("%d",&a[i]); } long long ans = 0LL; rep(i,18){ int t = 1<<18; t--; if((X>>i)&1){ t ^= 1<> dp(2); rep(j,N){ dp[(a[j]>>i)&1].push_back(a[j]); } long long sum = 0; sum -= get(dp[0],X); rep(j,dp[1].size())dp[0].push_back(dp[1][j]); sum += get(dp[0],X); ans += sum<