n, m = map(int, input().split())
money_need = []
for i in range(n):
money_need.append(int(input()))
def run_case(money_reset):
times = 1
left_money = money_reset
for i in money_need:
if i > left_money:
times += 1
left_money = money_reset - i
else:
left_money -= i
return times
def lower_bound():
low = 0
high = sum(money_need)
ans = 0
while low <= high:
mid = (low + high) // 2
if run_case(mid) == m:
ans = mid
high = mid - 1
# print(1, low, high, mid, ans, run_case(mid))
elif run_case(mid) < m:
high = mid - 1
# print(2, low, high, mid, ans, run_case(mid))
elif run_case(mid) > m:
low = mid + 1
# print(3, low, high, mid, ans, run_case(mid))
# print(1)
return ans
print(lower_bound())
biwgbSA9IG1hcChpbnQsIGlucHV0KCkuc3BsaXQoKSkKbW9uZXlfbmVlZCA9IFtdCmZvciBpIGluIHJhbmdlKG4pOgogICAgbW9uZXlfbmVlZC5hcHBlbmQoaW50KGlucHV0KCkpKQpkZWYgcnVuX2Nhc2UobW9uZXlfcmVzZXQpOgogICAgdGltZXMgPSAxCiAgICBsZWZ0X21vbmV5ID0gbW9uZXlfcmVzZXQKICAgIGZvciBpIGluIG1vbmV5X25lZWQ6CiAgICAgICAgaWYgaSA+IGxlZnRfbW9uZXk6CiAgICAgICAgICAgIHRpbWVzICs9IDEKICAgICAgICAgICAgbGVmdF9tb25leSA9IG1vbmV5X3Jlc2V0IC0gaQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGxlZnRfbW9uZXkgLT0gaQogICAgcmV0dXJuIHRpbWVzCgpkZWYgbG93ZXJfYm91bmQoKToKICAgIGxvdyA9IDAKICAgIGhpZ2ggPSBzdW0obW9uZXlfbmVlZCkKICAgIGFucyA9IDAKICAgIHdoaWxlIGxvdyA8PSBoaWdoOgogICAgICAgIG1pZCA9IChsb3cgKyBoaWdoKSAvLyAyCiAgICAgICAgaWYgcnVuX2Nhc2UobWlkKSA9PSBtOgogICAgICAgICAgICBhbnMgPSBtaWQKICAgICAgICAgICAgaGlnaCA9IG1pZCAtIDEKICAgICAgICAgICAgIyBwcmludCgxLCBsb3csIGhpZ2gsIG1pZCwgYW5zLCBydW5fY2FzZShtaWQpKQogICAgICAgIGVsaWYgcnVuX2Nhc2UobWlkKSA8IG06CiAgICAgICAgICAgIGhpZ2ggPSBtaWQgLSAxCiAgICAgICAgICAgICMgcHJpbnQoMiwgbG93LCBoaWdoLCBtaWQsIGFucywgcnVuX2Nhc2UobWlkKSkKICAgICAgICBlbGlmIHJ1bl9jYXNlKG1pZCkgPiBtOgogICAgICAgICAgICBsb3cgPSBtaWQgKyAxCiAgICAgICAgICAgICMgcHJpbnQoMywgbG93LCBoaWdoLCBtaWQsIGFucywgcnVuX2Nhc2UobWlkKSkKICAgICMgcHJpbnQoMSkKICAgIHJldHVybiBhbnMKcHJpbnQobG93ZXJfYm91bmQoKSk=