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 = max(money_need)
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+IGxlZnRfbW9uZXk6CiAgICAgICAgICAgIHRpbWVzICs9IDEKICAgICAgICAgICAgbGVmdF9tb25leSA9IG1vbmV5X3Jlc2V0IC0gaQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGxlZnRfbW9uZXkgLT0gaQogICAgcmV0dXJuIHRpbWVzCgpkZWYgbG93ZXJfYm91bmQoKToKICAgIGxvdyA9IG1heChtb25leV9uZWVkKQogICAgaGlnaCA9IHN1bShtb25leV9uZWVkKQogICAgYW5zID0gMAogICAgd2hpbGUgbG93IDw9IGhpZ2g6CiAgICAgICAgbWlkID0gKGxvdyArIGhpZ2gpIC8vIDIKICAgICAgICBpZiBydW5fY2FzZShtaWQpID09IG06CiAgICAgICAgICAgIGFucyA9IG1pZAogICAgICAgICAgICBoaWdoID0gbWlkIC0gMQogICAgICAgICAgICAjIHByaW50KDEsIGxvdywgaGlnaCwgbWlkLCBhbnMsIHJ1bl9jYXNlKG1pZCkpCiAgICAgICAgZWxpZiBydW5fY2FzZShtaWQpIDwgbToKICAgICAgICAgICAgaGlnaCA9IG1pZCAtIDEKICAgICAgICAgICAgIyBwcmludCgyLCBsb3csIGhpZ2gsIG1pZCwgYW5zLCBydW5fY2FzZShtaWQpKQogICAgICAgIGVsaWYgcnVuX2Nhc2UobWlkKSA+IG06CiAgICAgICAgICAgIGxvdyA9IG1pZCArIDEKICAgICAgICAgICAgIyBwcmludCgzLCBsb3csIGhpZ2gsIG1pZCwgYW5zLCBydW5fY2FzZShtaWQpKQogICAgIyBwcmludCgxKQogICAgcmV0dXJuIGFucwpwcmludChsb3dlcl9ib3VuZCgpKQ==