#include <bits/stdc++.h>
//#pragma GCC optimize ("O3")

#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define ll long long
#define pii pair<int,int>
#define point pair<ll,ll>
#define segment pair<point,point>
#define circle pair<point,double> //titik pusat, radius
#define line pair<double,double> //m,c
#define ins insert
#define er erase

#define FORU(a,b,c) for(int a=b; a<=c; a++)
#define FORD(a,b,c) for(int a=b; a>=c; a--)
#define FOR(a,b) for(int a=1; a<=b; a++)
#define FORA(a,b) for(auto (a) : (b))

const double EPS = 1e-9;
const double PI = acos(-1);
const int MOD = 1e9+7;

#define yu using
#define don namespace
#define sei std

yu don sei;

//const int nPrime=100000;
//bool isprime[nPrime];
//vector<int>prime;
//
//void pre()
//{
//	memset(isprime,1,sizeof(isprime));
//	isprime[1]=0;
//	for(int i=2;i*i<=nPrime;i++)
//	{
//		for(int j=i*i;j<nPrime;j+=i)
//		{
//			isprime[j]=0;
//		}
//	}
//	for(int i=2;i<nPrime;i++)
//	{
//		if(isprime[i])prime.pb(i);
//	}
//}

// ll pwr(ll b,ll e)
// {
// 	if(e==0)return 1;
// 	if(e==1)return b;
// 	ll temp=power(b,e/2);
// 	if(e%2==0)
// 	{
// 		return (temp*temp);
// 	}
// 	else
// 	{
// 		return (temp*temp*b);
// 	}
// }

// ll modpow(ll b,ll e)
// {
// 	b%=MOD;
// 	if(e==0)return 1;
// 	if(e==1)return b%MOD;
// 	ll temp=power(b,e/2);
// 	if(e%2==0)
// 	{
// 		return (temp*temp) %MOD;
// 	}
// 	else
// 	{
// 		return ((temp*temp %MOD )*b)%MOD;
// 	}
// }

ll gcd(ll a,ll b)
{
    if(b==0)return a;
    return gcd(b,a%b);
}

//int n,m;

//bool valid(int x,int y)
//{
//	if(x<0)return 0;
//	if(y<0)return 0;
//	if(x>=n)return 0;
//	if(y>=m)return 0;
//	return 1;
//}

//int p[]={-1,0,1,0};
//int q[]={0,1,0,-1};

//int p[]={-1,-1,-1,0,0,1,1,1};
//int q[]={-1,0,1,-1,1,-1,0,1};

point add(point a,point b)
{
    return {a.fi+b.fi,a.se+b.se};
}

point sub(point a,point b)
{
    return {a.fi-b.fi,a.se-b.se};
}

double dist(point a,point b)
{
    return ((a.fi-b.fi)*(a.fi-b.fi) + (a.se-b.se)*(a.se-b.se));
}

double rdist(point a,point b)
{
    return sqrt((a.fi-b.fi)*(a.fi-b.fi) + (a.se-b.se)*(a.se-b.se));
}

double distPS(point a,segment b)//heron formula, extreemely prone to precison error
{
    double AB=rdist(a,b.fi);
    double AC=rdist(a,b.se);
    double BC=rdist(b.fi,b.se);
    double s=AB+AC+BC;
    s/=2.0;
    return 2*sqrt(s*(s-AB)*(s-BC)*(s-AC))/BC;
}

double dabs(double a)
{
    if(a+EPS>0)return a;
    return -a;
}

double dotProduct(point a,point b)
{
    return a.fi*b.fi + a.se*b.se;
}

double crossProduct(point a,point b)
{
    return a.fi*b.se - a.se*b.fi;
}

int ccw(point a,point b,point c)// -1 CCW 0 COL 1 CW
{
    double tmp=crossProduct(sub(b,a),sub(c,a));
    if(tmp>EPS)
    {
        return -1;
    }
    else if(tmp<-EPS)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

point intLiLi(point a,point b,point c,point d)
{
    return mp(((a.fi*b.se-b.fi*a.se)*(c.fi-d.fi) - (a.fi-b.fi)*(c.fi*d.se-d.fi-c.se))/((a.fi-b.fi)*(c.se-d.se) - (a.se-b.se)*(c.fi-d.fi) ),
              ((a.fi*b.se-b.fi*a.se)*(c.se-d.se)-(a.se-b.se)*(c.fi*d.se-d.fi*c.se))/((a.fi-b.fi)*(c.se-d.se) - (a.se-b.se)*(c.fi-d.fi) ));
}

int main()
{
    int n,k;
    cin>>n>>k;
    ll A[n];
    for(int i=0;i<n;i++)
    {
        cin>>A[i];
    }
    vector<ll>S;
    for(int i=0;i<n;i++)
    {
        ll sum=0;
        for(int j=i;j<n;j++)
        {
            sum+=A[j];
            S.pb(sum);
        }
    }
    map<int,vector<ll> >M;
    sort(S.begin(),S.end());
    for(auto x:S)
    {
        ll now=x;
        int idx=0;
        while(now>0)
        {
            if(now%2==1)
            {
                // cout<<x<<" "<<idx<<endl;
                M[idx].pb(x);
            }
            now/=2;
            idx++;
        }
    }
//    cout<<endl;
    vector<ll>NOW=S;
    ll ans=0;
    for (auto rit=M.rbegin(); rit!=M.rend(); ++rit)
    {
        vector<ll>tmp;
        sort((*rit).se.begin(), (*rit).se.end());
        set_intersection(  NOW.begin(), NOW.end(), (*rit).se.begin(), (*rit).se.end(), back_inserter( tmp ));
//        cout<<"bit ke "<<(*rit).fi<<endl;
//        for(auto x:tmp)cout<<x<<endl;cout<<endl;
        if(tmp.size()<k)continue;
        NOW = tmp;
        ans+=(1LL<<(*rit).fi);
    }
    cout<<ans<<endl;
    return 0;
}

Measured memory_bytes: 92780