#include <bits/stdc++.h>
const long long inf = 100000000000000LL;
struct {
  int l, r;
  int count;
} t[2000100];
long long sum[101000];
long long v[101000];
int tot;
int n;
long long m;
long long now;
int root[100100];
void qsort(int l, int r) {
  int i = l, j = r;
  long long x = v[(l + r) / 2], y;
  do {
    while (v[i] < x) ++i;
    while (v[j] > x) --j;
    if (i <= j) {
      y = v[i];
      v[i] = v[j];
      v[j] = y;
      ++i;
      --j;
    }
  } while (i <= j);
  if (i < r) qsort(i, r);
  if (l < j) qsort(l, j);
}
long long getmin(long long a, long long b) {
  if (a > b) return b;
  return a;
}
long long getmax(long long a, long long b) {
  if (a > b) return a;
  return b;
}
int getans(int now, long long nl, long long nr, long long al, long long ar) {
  if (v[nl] > ar || v[nr] < al) return 0;
  if (v[nl] >= al && v[nr] <= ar) return t[now].count;
  long long mid = (nl + nr) / 2;
  long long exv = 0;
  if (al <= v[mid]) exv += getans(t[now].l, nl, mid, al, ar);
  if (ar > v[mid]) exv += getans(t[now].r, mid + 1, nr, al, ar);
  return exv;
}
void insert(int now, int pnow, long long nl, long long nr, long long aim) {
  if (nl == nr) {
    t[now].count = t[pnow].count + 1;
    return;
  }
  long long mid = (nl + nr) / 2;
  if (aim <= v[mid]) {
    t[now].r = t[pnow].r;
    t[now].l = ++tot;
    insert(t[now].l, t[pnow].l, nl, mid, aim);
  } else {
    t[now].l = t[pnow].l;
    t[now].r = ++tot;
    insert(t[now].r, t[pnow].r, mid + 1, nr, aim);
  }
  t[now].count = t[t[now].l].count + t[t[now].r].count;
}
void init() {
  scanf("%d %I64d", &n, &m);
  root[0] = 1;
  tot = 1;
  long long tmp;
  long long all = 0;
  for (int i = 1; i <= n; ++i) {
    scanf("%I64d", &sum[i]);
    sum[i] += sum[i - 1];
    v[i] = sum[i];
  }
  qsort(0, n);
  insert(root[0], root[0], 0, n, 0);
  for (int i = 1; i <= n; ++i) {
    root[i] = ++tot;
    insert(root[i], root[i - 1], 0, n, sum[i]);
  }
}
bool check(long long x) {
  long long exv = 0;
  for (int i = 1; i <= n; ++i) {
    exv += getans(root[i - 1], 0, n, -inf, sum[i] - x);
  }
  if (exv >= m) return true;
  return false;
}
void work() {
  long long l = -inf, r = inf;
  long long mid;
  while (r - l > 1) {
    mid = (l + r);
    if (mid < 0 && (mid % 2 != 0))
      mid = (mid - 1) / 2;
    else
      mid /= 2;
    if (check(mid))
      l = mid;
    else
      r = mid;
  }
  if (check(r))
    printf("%I64d\n", r);
  else
    printf("%I64d\n", l);
}
int main() {
  init();
  qsort(0, n);
  work();
  return 0;
}
