← Home
#include<bits/stdc++.h>
using namespace std;
#define rgi register int
typedef long long ll;
const int N=50010,SZ=1500010,W=30;
#define g(x) ((x)>>d&1)
ll n,k,ans,res,M,L,R=(1<<W)-1;
int a[N],ch[SZ][2],siz[SZ],s[SZ][W+1],rt,tot;
void add(int x,int i){
	for(rgi d=W;~d;--d)ans+=(ll)(g(x)?siz[i]-s[i][d]:s[i][d])<<d;
}
void ins(int x,int& r=rt,int d=W){
	++siz[r?r:r=++tot];
	for(rgi D=W;~D;--D)s[r][D]+=(x>>D&1);
	if(~d)ins(x,ch[r][g(x)],d-1);
}
int qry(int x,int r=rt,int d=W){
	return r?!g(M)*siz[ch[r][!g(x)]]+qry(x,ch[r][g(x^M)],d-1):0;
}
void calc(int x,int r=rt,int d=W){
	if(r)calc(x,ch[r][g(x^R)],d-1);
	if(r&&!g(R))add(x,ch[r][!g(x)]);
}
signed main(){
	cin>>n>>k,k<<=1;
	for(rgi i=1;i<=n;++i)cin>>a[i],ins(a[i]);
	while(R>L+1){
		res=0,M=L+R>>1;
		for(rgi i=1;i<=n;++i)res+=qry(a[i]);
		if(res>=k)L=M;
		else R=M,ans=(k-res)*R;
	}
	for(rgi i=1;i<=n;++i)calc(a[i]);
	cout<<(ans/2)%1000000007;
	return 0;
}