import std.stdio, std.conv, std.string, std.bigint;
import std.math, std.random, std.datetime;
import std.array, std.range, std.algorithm, std.container, std.format;
string read(){ static string[] ss; while(!ss.length) ss = readln.chomp.split; string res = ss[0]; ss.popFront; return res; }

/*

けたごとに見る。
A[i]たちについて、そのけたで1が多ければXのそのけたは0、0が多ければXのそのけたは1

それを集めれば良いが…、K以下という制限がある
その場合は、上のほうのけたを、やむなく1が良かったのに0にする

*/

void main(){
	int n = read.to!int;
	long k = read.to!long;
	long[] as = readln.chomp.split.map!(to!long).array;
	
	long x;
	int maxi;
	for(int i = 0; (1L<<i) < 2 * k; i ++){
		int cnt;
		foreach(a; as) if((1L<<i) & a) cnt += 1;
		if(cnt * 2 < n) x += 1L<<i;
		maxi = i;
		debug writeln("i:", i, " cnt:", cnt, " x:", x);
	}
	
	while(x > k){
		if((1L<<maxi) & x) x ^= (1L<<maxi);
		maxi -= 1;
		debug writeln("maxi:", maxi, " x:", x);
	}
	
	long ans;
	foreach(a; as) ans += x ^ a;
	ans.writeln;
}
