#include <bits/stdc++.h>

using namespace std;

#define pb push_back
#define eb emplace_back
#define mp make_pair
#define fi first
#define se second
#define all(a) (a).begin(),(a).end()

typedef long long ll;
typedef long double ld;
typedef unsigned int uint;
typedef unsigned long long ull;

constexpr const int INT_INF=0x3f3f3f3f; // 1061109567
constexpr const ll LL_INF=0x3f3f3f3f3f3f3f3f; // 4557430888798830399
constexpr const double D_INF=numeric_limits<double>::infinity();
constexpr const ld LD_INF=numeric_limits<ld>::infinity();
constexpr const double EPS=1e-9;

template<typename T>constexpr bool flt(const T&x,const T&y){return x<y-EPS;}
template<typename T>constexpr bool fgt(const T&x,const T&y){return x>y+EPS;}
template<typename T>constexpr bool feq(const T&x,const T&y){return abs(x-y)<=EPS;}
template<typename T>constexpr bool in(const T&v,const T&lo,const T&hi){return!(v<lo||hi<v);}
template<typename T>constexpr const T&_min(const T&x,const T&y){return x<y?x:y;}
template<typename T>constexpr const T&_max(const T&x,const T&y){return x<y?y:x;}
template<typename T,typename...Ts>constexpr const T&_min(const T&x,const Ts&...xs){return _min(x,_min(xs...));}
template<typename T,typename...Ts>constexpr const T&_max(const T&x,const Ts&...xs){return _max(x,_max(xs...));}
template<typename T,typename...Ts>void MIN(T&x,const Ts&...xs){x=_min(x,xs...);}
template<typename T,typename...Ts>void MAX(T&x,const Ts&...xs){x=_max(x,xs...);}
template<typename T>constexpr const T&_clamp(const T&v,const T&lo,const T&hi){return v<lo?lo:hi<v?hi:v;}
template<typename T>void CLAMP(T&v,const T&lo,const T&hi){v=_clamp(v,lo,hi);}
template<typename T,typename...Args>unique_ptr<T>_make_unique(Args&&...args){return unique_ptr<T>(new T(forward<Args>(args)...));}
template<typename T,typename...Args>shared_ptr<T>_make_shared(Args&&...args){return shared_ptr<T>(new T(forward<Args>(args)...));}
#define min(...) _min(__VA_ARGS__)
#define max(...) _max(__VA_ARGS__)
#define clamp(...) _clamp(__VA_ARGS__)
#define make_unique _make_unique
#define make_shared _make_shared

// MOD
#define add(a, b) ((a % MOD) + (b % MOD)) % MOD
#define mul(a, b) ((a % MOD) * (b % MOD)) % MOD
#define sub(a, b) ((a % MOD) + MOD - (b % MOD)) % MOD
const ll MOD = 1000000000 + 7;

//
//
//  　　┓　　　┏
//  　＊┗┓　┏┛
//  　　　┫　┣　＊
//  　┏┳┻━┻┳┓
//  　┗┫　　　┣┛
//  ＊　┣　　━┃　＊        Merry Christmas!!
//  　┏┛　　〃┃
//  　┃●　　　┣━┳┓
//  　┗┻┳━━┛　┣┛
//  　＊　┃┏┓┣┓┃
//WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW

int n, k;
ll a[1001];
ll sum[1001];
bool sign[510000][50];
int cont[60];
bool use[510000];

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.precision(10);
    cout << fixed;
#ifdef LOCAL_DEFINE
    FILE *stream1;
    //FILE *stream2;
    stream1 = freopen("/home/aim_cpo/ドキュメント/competitive/CLionProject/competitive/in.txt", "r", stdin);
    //stream2 = freopen("out.txt", "w", stdout);
    if (stream1 == NULL) return 0;
    //if (stream2 == NULL) return 0;
#endif
    cin >> n >> k;
    for (int i = 0; i < n; i++) {
        cin >> a[i];
        if (i == 0) sum[i] = a[i];
        else {
            sum[i] = sum[i - 1] + a[i];
        }
    }
    vector<ll> v;
    for (int i = 0; i < n; i++) {
        ll now = a[i];
        v.push_back(now);
        for (int j = i + 1; j < n; j++) {
            now += a[j];
            v.push_back(now);
        }
    }
    for (int i = 0; i < (int)v.size(); i++) {
        ll now = v[i];
        for (int j = 0; (1L<<j) <= now; j++) {
            if ((1L<<j) & now) {
                sign[i][j] = 1;
                cont[j]++;
            }
        }
    }
    for (int i = 0; i < (int)v.size(); i++) use[i] = 1;
    for (int i = 59; i >= 0; i--) {
        if (cont[i] < k) continue; // ok
        for (int j = 0; j < 60; j++) cont[j] = 0; //ok
        for (int j = 0; j < (int)v.size(); j++) {
            if (!sign[j][i]) use[j] = 0;
            if (use[j]) {
                for (int l = 0; l < 60; l++) {
                    if (v[j] & (1L<<l)) cont[l]++;
                }
            }
        }
        if (cont[i] == k) break;
    }
    ll ans = 0L;
    ll now = 1L;
    for (int i = 0; i < 60; i++) {
        if (cont[i] >= k) ans += now;
        now <<= 1;
        if (now < 0) assert(0);
    }
    cout << ans << endl;
#ifdef  LOCAL_DEFINE
    cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << "s.\n";
#endif
    return 0;
}

Measured memory_bytes: 29292