#include using namespace std; using ll = long long; #define rep(i, a, b) for (int i = (int)(a); i < (int)(b); i++) #define all(p) p.begin(), p.end() int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int N; cin >> N; ll B; cin >> B; auto f = [&](ll a) -> int { int res = 0; while (a >= (1ll << (res + 1))) res++; return res; }; vector X, Y; auto k = f(B); rep(i, 0, N){ ll a; cin >> a; int d = f(a); if (d == k) X.push_back(a); else if (d < k) Y.push_back(a); } int ans = (int)Y.size(); if (X.empty()){ cout << ans << "\n"; return 0; } sort(all(X)); sort(all(Y)); if (Y.empty()){ cout << ans + (X[0] <= B) << "\n"; return 0; } ll mask = 0; for (auto y : Y) mask ^= y; vector P(X.size()), Q(Y.size()); rep(i, 0, X.size()){ ll tmp = (mask ^ B ^ X[i]); int d = f(tmp); P[i] = lower_bound(all(Y), 1ll << d) - Y.begin(); } rep(i, 0, Y.size()){ ll tmp = (mask ^ B ^ Y[i]); Q[i] = upper_bound(all(X), tmp) - X.begin(); if (i) Q[i] = max(Q[i], Q[i - 1]); } rep(i, 0, X.size()){ if (P[i] != 0 && i < Q[P[i] - 1]){ cout << ans + 1 << "\n"; return 0; } } cout << ans << "\n"; }