

n, m = map(int, input().split())
days = []
for _ in range(n):
line = int(input())
days.append(line)
'''
m번 이하로 통장에서 돈 뺄 수 있음
뺄 때 k원씩 뺄 수 있음
돈 부족해지면 다시 인출해서 k원으로 리셋됨
1) max <= k <= 10000
2) cnt <= m
k의 cnt가 m보다 크면 오른쪽 선택
k의 cnt가 m보다 작으면 왼쪽 선택
'''
def binary_search():
k_min = max(days) # k는 최소 days의 최대값보다 같거나 커야함
k_max = sum(days) # 최악의 경우 모든 날짜의 금액을 한번에 뽑는 경우
answer = k_max
while k_min <= k_max: # 종료 조건 설정해주기
k = (k_min + k_max) // 2 # 현재 범위의 중간값 사용, 소수점 버리기
cnt = 1
money = k
for i in range(n):
if money - days[i] < 0:
cnt += 1
money = k - days[i] # 돈 충전하고 쓰는것까지 잊지않기!
else:
money -= days[i]
if cnt > m: # 현재 범위의 오른쪽만 사용
k_min = k + 1
else: # 현재 범위의 왼쪽만 사용
answer = k # cnt가 m보다 작거나 같다면, 현재 k는 답이 될 수 있으므로 저장
k_max = k - 1
return answer
print(binary_search())