#include<bits/stdc++.h>
using namespace std;

vector<int> v;
map<pair<int,int>, int> m;
/*int tree[4*300000];
void buildtree(){

} segment tree*/
int interval(int l, int r){
    int ans=v[l];
    for(int i=l+1; i<=r; i++){
        ans|=v[i];
    }
    //cout<<ans<<' ';
    return ans;
}
/*int ansi(vector<int> where){
    int ans=where[0];
    for(int i=1; i<where.size(); i++){
        ans&=where[i];
    }
    return ans;
}*/
int maxansi=0;
int n;
void all(int k, int start, int ans){
    if(start==0){
        //an
    }
    if(k==1){
        if(m.find({start,n-1})==m.end()){
            m[{start,n-1}]=interval(start,n-1);
        }
        if(start==0){
            ans=m[{start,n-1}];
        }
        else{
            ans&=m[{start,n-1}];
        }
        //int ans=ansi(ok);
        /*if(ans>maxansi){
            maxansi=ans;
        }*/
        return;
    }
    for(int i=start; i<v.size()-(k-1); i++){
        //vector<int> ko=ok;
        int ko=ans;
        if(m.find({start,i})==m.end()){
            m[{start,i}]=interval(start,i);
        }
        if(start!=0){
            ko&=m[{start,i}];
        }
        else{
            ko=m[{start,i}];;
        }
        if(ko<maxansi){
            return;
        }
        all(k-1,i+1,ko);
    }
    return;
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int k;
    cin>>n>>k;
    int ai;
    //bool isitone=true;
    for(int i=0; i<n; i++){
        cin>>ai;
        //if(ai>1){
            //isitone=false;
        //}
        v.push_back(ai);
    }
    //if(isitone==true){
        //cout<<1;
        //return 0;
    //}
    all(k,0,0);
    cout<<maxansi;
}
