#include<iostream>
#include<set>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
void debug(multiset<unsigned long long> s){
	for(const auto &it : s){
		cout<<it<<" ";
	}
	cout<<endl;
}
int main(){
	unsigned long long n,k;
	cin>>n>>k;
	map<unsigned long long,multiset<unsigned long long>> m;
	unsigned long long t[31];
	unsigned long long h=1;
	for(int i=0;i<31;i++){
		t[i]=h;
		multiset<unsigned long long> s;
		m[h]=s;
		h*=2;
	}
	for(unsigned long long i=0;i<n;i++){
		unsigned long long j;
		cin>>j;
		for(int ii=0;ii<31;ii++){
			if(t[ii]&j){
				m[t[ii]].insert(j);
			}
		}
	}
	multiset<unsigned long long> res;
	int pos=-1;
	unsigned long long gg=0;
	for(int i=30;i>=0;i--){
		//cout<<i<<": ";
		//debug(m[t[i]]);
		//continue;
		if(m[t[i]].size()>=k){
			res=m[t[i]];
			pos=i;
			gg=t[i];
			//debug(res);
			break;
		}
	}
	//return 0;
	if(pos==-1){
		cout<<"0"<<endl;
		return 0;
	}
	for(int i=pos-1;i>=0;i--){
		multiset<unsigned long long> tt=m[t[i]];
		vector<unsigned long long> temp;
		set_intersection(res.begin(),res.end(),tt.begin(),tt.end(),back_inserter(temp));
		multiset<unsigned long long> oo=multiset<unsigned long long>(temp.begin(),temp.end());
		//cout<<"GG: "<<gg<<endl;
		//debug(res);
		//debug(tt);
		//debug(oo);
		if(temp.size()>=k){
			res=oo;
			gg+=t[i];
		//	cout<<"ACC: ";
		//	debug(res);
		}
		//cout<<"---"<<endl;
	}
	cout<<gg<<endl;
	return 0;

}

