#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1);
const double eps = 1e-9;
const int inf = 2000000000;
const long long infLL = 9000000000000000000;
inline bool checkBit(long long n, int i) { return n & (1LL << i); }
inline long long setBit(long long n, int i) {
  return n | (1LL << i);
  ;
}
inline long long resetBit(long long n, int i) { return n & (~(1LL << i)); }
int dx[] = {0, 0, +1, -1};
int dy[] = {+1, -1, 0, 0};
inline long long power(long long bs, long long k) {
  long long x = 1LL, y = bs;
  if (k == 0) return 1LL;
  while (k > 0) {
    if (k % 2) x *= y;
    y *= y;
    k /= 2;
  }
  return x;
}
template <typename first, typename second>
ostream &operator<<(ostream &os, const pair<first, second> &p) {
  return os << "(" << p.first << ", " << p.second << ")";
}
template <class T>
string to_str(T t) {
  stringstream ss;
  ss << t;
  return ss.str();
}
template <typename T>
ostream &operator<<(ostream &os, const vector<T> &v) {
  os << "{";
  for (auto it = v.begin(); it != v.end(); ++it) {
    if (it != v.begin()) os << ", ";
    os << *it;
  }
  return os << "}";
}
template <typename T>
ostream &operator<<(ostream &os, const set<T> &v) {
  os << "[";
  for (auto it = v.begin(); it != v.end(); ++it) {
    if (it != v.begin()) os << ", ";
    os << *it;
  }
  return os << "]";
}
template <typename T>
ostream &operator<<(ostream &os, const multiset<T> &v) {
  os << "[";
  for (auto it = v.begin(); it != v.end(); ++it) {
    if (it != v.begin()) os << ", ";
    os << *it;
  }
  return os << "]";
}
template <typename first, typename second>
ostream &operator<<(ostream &os, const map<first, second> &v) {
  os << "[";
  for (auto it = v.begin(); it != v.end(); ++it) {
    if (it != v.begin()) os << ", ";
    os << it->first << " = " << it->second;
  }
  return os << "]";
}
clock_t tStart = clock();
void faltu() { cerr << '\n'; }
template <typename T>
void faltu(T a[], int n) {
  for (int i = 0; i < n; ++i) cerr << a[i] << ' ';
  cerr << '\n';
}
template <typename T, typename... hello>
void faltu(T arg, const hello &...rest) {
  cerr << arg << ' ';
  faltu(rest...);
}
long long dp[60][60], n, k, a[60], sum[60];
long long func(long long i, long long x, long long val) {
  if (i == k) {
    if (x > n)
      return 1LL;
    else
      return 0LL;
  }
  if (x > n) {
    return 0LL;
  }
  long long &rt = dp[i][x];
  if (rt != -1LL) return rt;
  rt = 0LL;
  for (long long j = x; j <= n; ++j) {
    long long cnt = (sum[j] - sum[x - 1]);
    if ((cnt & val) == val) {
      long long cur = 1LL;
      long long p = func(i + 1, j + 1, val);
      if (p) return rt = 1LL;
    }
  }
  return rt;
}
int main() {
  ios_base::sync_with_stdio(0);
  ;
  cout.unsetf(ios::floatfield);
  cout.precision(10);
  cout.setf(ios::fixed, ios::floatfield);
  ;
  long long i, j;
  memset(dp, -1LL, sizeof(dp));
  cin >> n >> k;
  sum[0] = 0LL;
  for (i = 1; i <= n; ++i) {
    cin >> a[i];
    sum[i] = sum[i - 1] + a[i];
  }
  long long ans = 0LL, x = 0LL;
  for (i = 58; i >= 0; --i) {
    x = (1LL << i);
    x |= ans;
    memset(dp, -1LL, sizeof(dp));
    if (func(0, 1, x) == 1LL) {
      ans = x;
    }
  }
  cout << ans;
  return 0;
}
