#include using namespace std; int n, k, a[1000005], ans; struct node { int val; node* next[2]; ~node() { for (auto& i : next) { delete i; } } }; void insert(node* root, int x) { for (int i = 21; i >= 0; i--) { if (root->next[(x >> i) & 1] == nullptr) root->next[(x >> i) & 1] = new node(); root = root->next[(x >> i) & 1]; root->val++; } } int search(node* root, int x) { int res = 0; node* p = root; for (int i = 21; i >= 0; i--) { int c = (x >> i) & 1; int t = (k >> i) & 1; if (t && p->next[1 - (c ^ t)] != nullptr) { res += p->next[1 - (c ^ t)]->val; } if (p->next[c ^ t] == nullptr) break; p = p->next[c ^ t]; } return res; } int main() { node* root = new node(); cin >> n >> k; for (int i = 0; i < n; i++) { cin >> a[i]; insert(root, a[i]); } for (int i = 0; i <= 2097151; i++) { ans = max(ans, search(root, i)); } cout << ans << endl; delete root; return 0; }