#include <iostream>
#include <queue>
#define int long long
struct Node
{
unsigned int val;
int x, y;
friend bool operator<(Node u, Node v)
{
return u.val < v.val;
}
};
int trieSize;
unsigned int a[500005], trie[16000005][2], cnt[16000005];
Node d[500005];
std::priority_queue<Node> pq;
void insert(unsigned int val)
{
int u = 0;
for (int i = (1 << 31); i >= 1; i >>= 1)
{
bool t = val & i;
if (trie[u][t] == 0)
trie[u][t] = ++trieSize;
u = trie[u][t];
cnt[u]++;
}
}
unsigned int query(unsigned int val, int k)
{
unsigned int res = 0;
int u = 0;
for (int i = (1 << 31); i >= 1; i >>= 1)
{
bool t = val & i;
if (cnt[trie[u][!t]] > k)
{
u = cnt[trie[u][!t]];
res += i;
}
else
{
u = cnt[trie[u][t]];
k -= cnt[trie[u][!t]];
}
}
return res;
}
main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
int n, k;
long long ans = 0;
std::cin >> n >> k;
for (int i = 1; i <= n; i++)
{
std::cin >> a[i];
a[i] ^= a[i - 1];
}
for (int i = 0; i <= n; i++)
insert(a[i]);
for (int i = 0; i <= n; i++)
{
d[i].val = query(a[i], 1);
d[i].x = i;
d[i].y = 1;
pq.push(d[i]);
}
for (int i = 1; i <= 2 * k; i++)
{
Node x = pq.top();
pq.pop();
ans += x.val;
d[x.x].y++;
d[x.x].val = query(a[x.x], d[x.x].y);
pq.push(d[x.x]);
}
std::cout << ans / 2 << "\n";
return 0;
}