#include <bits/stdc++.h>
using namespace std;
#define ll long long
vector<ll>v;
vector<vector<ll>>dp(305,vector<ll>(2005));
ll M=20005;
ll n;
vector<ll>sg(4*M);
void build(ll u,ll l,ll r)
{
    if(l==r)
    {
        sg[u]=v[l];
        return;
    }
    ll mid=(l+r)>>1;
    build(2*u,l,mid);
    build(2*u+1,mid+1,r);
    sg[u]=sg[2*u]|sg[2*u+1];
}
ll get(ll u,ll l,ll r,ll ql,ll qr)
{
    if(l>=ql && r<=qr)
        return sg[u];
    ll mid=(l+r)>>1,a=0,w=0;
    if(ql<=mid)
    a=get(u*2,mid+1,r,ql,qr);
    if(qr>mid)
    w=get(2*u+1,l,mid,ql,qr);
    return a|w;
}
ll cost(ll a,ll b)
{
    return get(1,1,n,a,b);
}
void dc(ll k,ll l,ll r,ll opl,ll opr)
{
    if(l>r)
        return;
    ll mid=(l+r)>>1;
    pair<ll,ll>best={0,l};
    for(int i=1;i<=min(opr,mid-1);i++)
    {
        best=max(best,{dp[i][k-1]&cost(i+1,mid),i});
    }
    ll op=best.second;
    dp[mid][k]=best.first;
    dc(k,l,mid-1,opl,op);
    dc(k,mid+1,r,op,opr);
}
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    ll k;
    cin>>n>>k;
    v.assign(n+1,0);
    for(int i=1;i<=n;i++)
    {
        cin>>v[i];
    }
    for(int i=1;i<=n;i++)
    {
        dc(i,1,n,i-1,n-1);
    }
    cout<<dp[n][k];
}
