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

vector<int> v;
map<pair<int,int>, int> m;
int tree[4*300000];
void buildtree(int ind, int l, int r){
    if(l==r){
        tree[ind]=v[l];
        return;
    }
    int mid=(l+r)/2;
    buildtree(2*ind, l, mid);
    buildtree(2*ind+1, mid+1, r);
    tree[ind]=tree[2*ind]&tree[2*ind+1];
}
int interval(int ind,int l,int r,int ql, int qr){
    if(l==r){
        return tree[ind];
    }
    int mid =(l+r)/2;
    int ans=0;
    if(ql<=mid){
        ans|=interval(2*ind,l,mid,ql,qr);
    }
    if(qr>mid){
        ans|=interval(2*ind+1,mid+1,r,ql,qr);
    }
    return ans;
}
int maxansi=0;
int n;
void all(int k, int start, int ok){
    if(k==1){
        if(m.find({start,n-1})==m.end()){
            m[{start,n-1}]=interval(1,0,n-1,start,n-1);
        }
        if(ok==-1){
            ok=(m[{start,n-1}]);
        }
        else{
            ok&=(m[{start,n-1}]);
        }
        if(ok>maxansi){
            maxansi=ok;
        }
        return;
    }
    for(int i=start; i<v.size()-(k-1); i++){
        int ko=ok;
        if(m.find({start,i})==m.end()){
            m[{start,i}]=interval(1,0,n-1,start,i);
        }
        if(ko==-1){
            ko=m[{start,i}];
        }
        else{
            ko&=m[{start,i}];
        }
        /*if(ok<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;
    for(int i=0; i<n; i++){
        cin>>ai;
        v.push_back(ai);
    }
    buildtree(1,0,n-1);
    all(k,0,-1);
    cout<<maxansi;
}
