#include <bits/stdc++.h>
using namespace std;
const int limN = 2e5 + 5;
const int MAX_NODES = 12500005;
const long long INF = 4e18;
int child[MAX_NODES][2];
int c1[MAX_NODES], c2[MAX_NODES];
int id1[MAX_NODES], id2[MAX_NODES];
int nnode = 0;
inline int new_node() {
int u = ++nnode;
child[u][0] = child[u][1] = 0;
c1[u] = c2[u] = id1[u] = id2[u] = 0;
return u;
}
inline void add(int u, int c, int id) {
if (!c1[u]) {
c1[u] = c;
id1[u] = id;
}
else if (c1[u] != c && !c2[u]) {
c2[u] = c;
id2[u] = id;
}
}
inline bool check(int u, int c) {
if (!u) return false;
if (c1[u] != c) return true;
return c2[u] != 0;
}
inline int other(int u, int c) {
if (c1[u] != c) return id1[u];
return id2[u];
}
inline void insert(int root, long long val, int c, int id) {
int u = root;
add(u, c, id);
for (int i = 30; i >= 0; --i) {
int bit = (val >> i) & 1;
if (!child[u][bit])
child[u][bit] = new_node();
u = child[u][bit];
add(u, c, id);
}
}
inline int get(int root, long long val, int c) {
int u = root;
for (int i = 30; i >= 0; --i) {
int bit = (val >> i) & 1;
int x = child[u][bit];
if (x && check(x, c)) u = x;
else u = child[u][!bit];
}
return other(u, c);
}
struct DSU {
vector<int> lab;
DSU(int n) : lab(n + 1, -1) {}
int find(int u) {
return lab[u] < 0 ? u : lab[u] = find(lab[u]);
}
bool unite(int u, int v) {
u = find(u); v = find(v);
if (u == v) return false;
if (lab[u] > lab[v]) swap(u, v);
lab[u] += lab[v]; lab[v] = u;
return true;
}
};
struct Edge {
long long w;
int u, v;
};
int n, comp[limN];
long long a[limN], b[limN], k;
Edge best[limN];
void solve() {
cin >> n >> k;
for (int i = 1; i <= n; ++i) {
cin >> a[i];
b[i] = a[i] + k;
}
DSU dsu(n);
long long ans = 0;
int numcomp = n;
vector<Edge> tmp;
tmp.reserve(n);
while (numcomp > 1) {
nnode = 0;
int A = new_node(), B = new_node();
for (int i = 1; i <= n; ++i) {
comp[i] = dsu.find(i);
insert(A, a[i], comp[i], i);
insert(B, b[i], comp[i], i);
best[i] = {INF, -1, -1};
}
for (int i = 1; i <= n; ++i) {
int c = comp[i];
int v1 = get(B, a[i], c);
long long w1 = a[i] ^ b[v1];
if (w1 < best[c].w)
best[c] = {w1, i, v1};
int v2 = get(A, b[i], c);
long long w2 = b[i] ^ a[v2];
if (w2 < best[c].w)
best[c] = {w2, i, v2};
}
tmp.clear();
for (int i = 1; i <= n; ++i) {
if (comp[i] == i && best[i].w != INF) {
tmp.push_back(best[i]);
}
}
bool ok = false;
for (const Edge &it : tmp) {
if (dsu.unite(it.u, it.v)) {
ans += it.w;
--numcomp;
ok = true;
}
}
if (!ok) break;
}
cout << ans << "\n";
}
int main() {
ios::sync_with_stdio(false), cin.tie(nullptr);
solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgbGltTiA9IDJlNSArIDU7CmNvbnN0IGludCBNQVhfTk9ERVMgPSAxMjUwMDAwNTsKY29uc3QgbG9uZyBsb25nIElORiA9IDRlMTg7CgppbnQgY2hpbGRbTUFYX05PREVTXVsyXTsKaW50IGMxW01BWF9OT0RFU10sIGMyW01BWF9OT0RFU107CmludCBpZDFbTUFYX05PREVTXSwgaWQyW01BWF9OT0RFU107CmludCBubm9kZSA9IDA7CgppbmxpbmUgaW50IG5ld19ub2RlKCkgewogICAgaW50IHUgPSArK25ub2RlOwogICAgY2hpbGRbdV1bMF0gPSBjaGlsZFt1XVsxXSA9IDA7CiAgICBjMVt1XSA9IGMyW3VdID0gaWQxW3VdID0gaWQyW3VdID0gMDsKICAgIHJldHVybiB1Owp9CgppbmxpbmUgdm9pZCBhZGQoaW50IHUsIGludCBjLCBpbnQgaWQpIHsKICAgIGlmICghYzFbdV0pIHsKICAgICAgICBjMVt1XSA9IGM7CiAgICAgICAgaWQxW3VdID0gaWQ7CiAgICB9CiAgICBlbHNlIGlmIChjMVt1XSAhPSBjICYmICFjMlt1XSkgewogICAgICAgIGMyW3VdID0gYzsKICAgICAgICBpZDJbdV0gPSBpZDsKICAgIH0KfQoKaW5saW5lIGJvb2wgY2hlY2soaW50IHUsIGludCBjKSB7CiAgICBpZiAoIXUpIHJldHVybiBmYWxzZTsKICAgIGlmIChjMVt1XSAhPSBjKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBjMlt1XSAhPSAwOwp9CgppbmxpbmUgaW50IG90aGVyKGludCB1LCBpbnQgYykgewogICAgaWYgKGMxW3VdICE9IGMpIHJldHVybiBpZDFbdV07CiAgICByZXR1cm4gaWQyW3VdOwp9CgppbmxpbmUgdm9pZCBpbnNlcnQoaW50IHJvb3QsIGxvbmcgbG9uZyB2YWwsIGludCBjLCBpbnQgaWQpIHsKICAgIGludCB1ID0gcm9vdDsKICAgIGFkZCh1LCBjLCBpZCk7CiAgICBmb3IgKGludCBpID0gMzA7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgaW50IGJpdCA9ICh2YWwgPj4gaSkgJiAxOwogICAgICAgIGlmICghY2hpbGRbdV1bYml0XSkKICAgICAgICAgICAgY2hpbGRbdV1bYml0XSA9IG5ld19ub2RlKCk7CgogICAgICAgIHUgPSBjaGlsZFt1XVtiaXRdOwogICAgICAgIGFkZCh1LCBjLCBpZCk7CiAgICB9Cn0KCmlubGluZSBpbnQgZ2V0KGludCByb290LCBsb25nIGxvbmcgdmFsLCBpbnQgYykgewogICAgaW50IHUgPSByb290OwogICAgZm9yIChpbnQgaSA9IDMwOyBpID49IDA7IC0taSkgewogICAgICAgIGludCBiaXQgPSAodmFsID4+IGkpICYgMTsKCiAgICAgICAgaW50IHggPSBjaGlsZFt1XVtiaXRdOwogICAgICAgIGlmICh4ICYmIGNoZWNrKHgsIGMpKSB1ID0geDsKICAgICAgICBlbHNlIHUgPSBjaGlsZFt1XVshYml0XTsKICAgIH0KICAgIHJldHVybiBvdGhlcih1LCBjKTsKfQoKc3RydWN0IERTVSB7CiAgICB2ZWN0b3I8aW50PiBsYWI7CiAgICBEU1UoaW50IG4pIDogbGFiKG4gKyAxLCAtMSkge30KCiAgICBpbnQgZmluZChpbnQgdSkgewogICAgICAgIHJldHVybiBsYWJbdV0gPCAwID8gdSA6IGxhYlt1XSA9IGZpbmQobGFiW3VdKTsKICAgIH0KCiAgICBib29sIHVuaXRlKGludCB1LCBpbnQgdikgewogICAgICAgIHUgPSBmaW5kKHUpOyB2ID0gZmluZCh2KTsKICAgICAgICBpZiAodSA9PSB2KSByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKGxhYlt1XSA+IGxhYlt2XSkgc3dhcCh1LCB2KTsKICAgICAgICBsYWJbdV0gKz0gbGFiW3ZdOyBsYWJbdl0gPSB1OwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9OwoKc3RydWN0IEVkZ2UgewogICAgbG9uZyBsb25nIHc7CiAgICBpbnQgdSwgdjsKfTsKCmludCBuLCBjb21wW2xpbU5dOwpsb25nIGxvbmcgYVtsaW1OXSwgYltsaW1OXSwgazsKRWRnZSBiZXN0W2xpbU5dOwoKdm9pZCBzb2x2ZSgpIHsKICAgIGNpbiA+PiBuID4+IGs7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyArK2kpIHsKICAgICAgICBjaW4gPj4gYVtpXTsKICAgICAgICBiW2ldID0gYVtpXSArIGs7CiAgICB9CgogICAgRFNVIGRzdShuKTsKICAgIGxvbmcgbG9uZyBhbnMgPSAwOwogICAgaW50IG51bWNvbXAgPSBuOwoKICAgIHZlY3RvcjxFZGdlPiB0bXA7CiAgICB0bXAucmVzZXJ2ZShuKTsKCiAgICB3aGlsZSAobnVtY29tcCA+IDEpIHsKICAgICAgICBubm9kZSA9IDA7CiAgICAgICAgaW50IEEgPSBuZXdfbm9kZSgpLCBCID0gbmV3X25vZGUoKTsKCiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgKytpKSB7CiAgICAgICAgICAgIGNvbXBbaV0gPSBkc3UuZmluZChpKTsKICAgICAgICAgICAgaW5zZXJ0KEEsIGFbaV0sIGNvbXBbaV0sIGkpOwogICAgICAgICAgICBpbnNlcnQoQiwgYltpXSwgY29tcFtpXSwgaSk7CiAgICAgICAgICAgIGJlc3RbaV0gPSB7SU5GLCAtMSwgLTF9OwogICAgICAgIH0KCiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgKytpKSB7CiAgICAgICAgICAgIGludCBjID0gY29tcFtpXTsKCiAgICAgICAgICAgIGludCB2MSA9IGdldChCLCBhW2ldLCBjKTsKICAgICAgICAgICAgbG9uZyBsb25nIHcxID0gYVtpXSBeIGJbdjFdOwogICAgICAgICAgICBpZiAodzEgPCBiZXN0W2NdLncpCiAgICAgICAgICAgICAgICBiZXN0W2NdID0ge3cxLCBpLCB2MX07CgogICAgICAgICAgICBpbnQgdjIgPSBnZXQoQSwgYltpXSwgYyk7CiAgICAgICAgICAgIGxvbmcgbG9uZyB3MiA9IGJbaV0gXiBhW3YyXTsKICAgICAgICAgICAgaWYgKHcyIDwgYmVzdFtjXS53KQogICAgICAgICAgICAgICAgYmVzdFtjXSA9IHt3MiwgaSwgdjJ9OwogICAgICAgIH0KCiAgICAgICAgdG1wLmNsZWFyKCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgKytpKSB7CiAgICAgICAgICAgIGlmIChjb21wW2ldID09IGkgJiYgYmVzdFtpXS53ICE9IElORikgewogICAgICAgICAgICAgICAgdG1wLnB1c2hfYmFjayhiZXN0W2ldKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgYm9vbCBvayA9IGZhbHNlOwogICAgICAgIGZvciAoY29uc3QgRWRnZSAmaXQgOiB0bXApIHsKICAgICAgICAgICAgaWYgKGRzdS51bml0ZShpdC51LCBpdC52KSkgewogICAgICAgICAgICAgICAgYW5zICs9IGl0Lnc7CiAgICAgICAgICAgICAgICAtLW51bWNvbXA7CiAgICAgICAgICAgICAgICBvayA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghb2spIGJyZWFrOwogICAgfQoKICAgIGNvdXQgPDwgYW5zIDw8ICJcbiI7Cn0KCmludCBtYWluKCkgewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpLCBjaW4udGllKG51bGxwdHIpOwoKICAgIHNvbHZlKCk7CiAgICByZXR1cm4gMDsKfQo=