#include <bits/stdc++.h>
#pragma GCC optimize ("Ofast,unroll-loops,fast-math")
using namespace std;

int n,k,maxi=0,ans;
int v[100005],tree[450000];

void update(int node,int l,int r,int pos,int val) {
    if (l==r) {
        tree[node]=val;
        return;
    }
    int mid=(l+r)/2;
    if (pos<=mid) update(node*2,l,mid,pos,val);
    else update(node*2+1,mid+1,r,pos,val);
    tree[node]=tree[2*node] | tree[2*node+1];
}

int query(int node,int ql,int qr,int l,int r) {
    if (ql>r || qr<l) return 0;
    if (ql>=l && qr<=r) return tree[node];
    int mid=(ql+qr)/2;
    return query(2*node,ql,mid,l,r) | query(2*node+1,mid+1,qr,l,r);
}

void backtracking(int cnt,int last) {
    int prev=ans;
    if (cnt>k) return;
    if (cnt==k) {
        ans=(ans & query(1,1,n,last+1,n));
        if (ans>maxi && cnt==k) maxi=ans;
        ans=prev;
    }
    else {
        for (int i=last+1; i<=n-(k-cnt); i++) {
            int nr=query(1,1,n,last+1,i);
            if (cnt==1 && nr%2==0) continue;
            if (cnt==1) ans=nr;
            else ans=(ans & nr);
            backtracking(cnt+1,i);
            ans=prev;
        }
    }
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>k;
    for (int i=1; i<=n; i++) {
        cin>>v[i];
    }
    for (int i=1; i<=n; i++) {
        update(1,1,n,i,v[i]);
    }
    backtracking(1,0);
    cout<<maxi;
}
