#include<bits/stdc++.h>
using namespace std;
int n,k;
const int MAXN=1000000;
int a[MAXN+1];
int tree[4*MAXN];
void buildtree(int l, int ind, int r){
    if(l==r){
        tree[ind]=a[l];
        return;
    }
    int mid=(l+r)/2;
    buildtree(l,ind*2,mid);
    buildtree(mid+1,ind*2+1,r);
    tree[ind]=tree[ind*2]||tree[ind*2+1];
}
int query(int l, int ind, int r,int h,int j,int y){
    if(l>j||r<h) return y;

    if(l>=h&&r<=j){
        y=y&tree[ind];
        return y;
    }
    int mid=(l+r)/2;
    if(mid>=h){
        y=query(l,ind*2,mid,h,j,y);
    }
    if(mid<j){
        y=query(mid+1,ind*2+1,r,h,j,y);
    }
    return y;
}
int mq=-1;
void f(int o, int r,int e){
    int q=0;
    for(int i=o;i<=n-r;++i){
        q=query(0,1,n-1,o,i,INT_MAX);
        if(r!=1){
            f(i+1,r-1,e&q);
        }
        else{
            int e1=e;
            e1=e&q;
            mq=max(mq,e1);
        }
    }
    return;
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin>>n>>k;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    buildtree(0,1,n-1);
    f(0,k,INT_MAX);
    cout<<mq+1<<"\n";


    return 0;
}
