#include <bits/stdc++.h>
using namespace std;
const int INF = 1000000007;
const double EPS = 1e-10;
const int SZ = 500000;
vector<long long> datl[SZ];
vector<long long> datr[SZ];
long long nums[SZ];
void init(long long l, long long r, long long k) {
  if (r - l == 1) {
    datl[k].push_back(nums[l]);
    datr[k].push_back(nums[l]);
  } else {
    long long m = (l + r) / 2;
    init(l, m, k * 2 + 1);
    init(m, r, k * 2 + 2);
    long long rpre = nums[l], lpre = nums[r - 1];
    ;
    datr[k].push_back(rpre);
    datl[k].push_back(lpre);
    for (int i = l + 1; i < r; i++) {
      datr[k].push_back(rpre + nums[i]);
      rpre += nums[i];
    }
    for (int i = r - 2; i >= l; i--) {
      datl[k].push_back(lpre + nums[i]);
      lpre += nums[i];
    }
    sort(datr[k].begin(), datr[k].end());
    sort(datl[k].begin(), datl[k].end());
  }
}
long long query(long long l, long long r, long long k, long long x) {
  if (r - l == 1) {
    if (nums[l] >= x)
      return 1;
    else
      return 0;
  } else {
    long long m = (l + r) / 2;
    long long chl = k * 2 + 1;
    long long chr = k * 2 + 2;
    long long res = query(l, m, chl, x) + query(m, r, chr, x);
    long long posr = 0;
    long long szr = datr[chr].size();
    for (int i = (int)datl[chl].size() - 1; i >= 0; i--) {
      while (posr < szr && datl[chl][i] + datr[chr][posr] < x) posr++;
      res += szr - posr;
    }
    return res;
  }
}
int main() {
  long long n, k;
  cin >> n >> k;
  for (int i = 0; i < n; i++) {
    cin >> nums[i];
  }
  init(0, n, 0);
  long long ub = 100000000000000LL;
  long long lb = -100000000000000LL;
  while (ub - lb > 1) {
    long long mb = (ub + lb) / 2;
    long long res = query(0, n, 0, mb);
    if (res < k) {
      ub = mb;
    } else {
      lb = mb;
    }
  }
  cout << lb << endl;
  return 0;
}
