#include<iostream>
#include<queue>
using namespace std;
const int N=500050;
int n,k,son[32*N][3],cnt,sum[N],th[N],len=30;
long long w[N],ans;
struct aaa{
long long num;
int idx;
friend bool operator < (aaa a,aaa b){
return a.num<b.num;
}
}mxa;
priority_queue<aaa>qa;
void insert(long long x){
int p=0,ls;
for(int i=len;i>=0;i--){
ls=(x>>i)&1;
++sum[p];
if(!son[p][ls]) son[p][ls]=++cnt;
p=son[p][ls];
}
++sum[p];
}
long long query(long long x,int k){
int p=0,ls;
long long tl=0;
for(int i=len;i>=0;i--){
ls=(x>>i)&1;
if(!son[p][ls^1]) p=son[p][ls];
else if(k<=sum[son[p][ls^1]]) p=son[p][ls^1],tl|=(1ll<<i);
else k-=sum[son[p][ls^1]],p=son[p][ls];
}
return tl;
}
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>w[i],w[i]=w[i]^w[i-1];
for(int i=0;i<=n;i++) insert(w[i]);
for(int i=0;i<=n;i++) qa.push((aaa){query(w[i],1),i}),th[i]=1;
for(int i=1;i<=2*k;i++){
mxa=qa.top(),ans+=mxa.num;
qa.pop();
if(th[mxa.idx]<n) qa.push((aaa){query(w[mxa.idx],++th[mxa.idx]),mxa.idx});
}
cout<<ans/2<<endl;
return 0;
}