#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n;
vector<vector<long long>> memo;
long long pow(int a , int b){ long long ans=1;
for(int i = 0 ; i<b ; i++){
    ans=ans*a;
}
return ans;
}
vector<bool> OR(int begin , int end , vector<long long>niza){
    vector<bool> ans(61,0);
    for(int j = begin ; j<end ; j++){
    for(int i = 61 ; i>-1 ; i--){
        if(niza[j]>=(long long)(pow(2,i))){ ans[i]=1; niza[j]=niza[j]-(int)(pow(2,i));
    }
    }
    return ans;
}}
long long ORint(vector<bool> OR){
long long ans=0;
for(int i=0 ; i<=61 ; i++){
    if(OR[i]==1) ans+=pow(2,61-i);
}
return ans;
}
long long solve(int granici , int mesto , vector<long long> niza){
    long long ans=0;
    if(memo[granici-1][mesto]!=-1) return memo[granici-1][mesto];
    else if(granici==1) return memo[granici-1][mesto]=ORint(OR(mesto,n,niza));
    else{
    for(int i = mesto ; i<=n-granici ; i++){
        long long val=ORint(OR(mesto,i,niza));
        ans=max(ans,val&solve(granici-1,i,niza));
    }
    return memo[granici-1][mesto]=ans;
    }
}
int main(){
int k; cin>>n>>k;
memo.assign(n,vector<long long>(k,-1));
vector<long long> niza(n);
for(int i = 0 ; i<n ; i++) cin>>niza[i];
cout<<solve(k,0,niza);
}
