import sys
import math

n, k = map(int, sys.stdin.readline().split())

W = []
for _ in range(n):
    w = int(sys.stdin.readline())
    W.append(w)

r = sum(W)
l = max(W)
pre_p = 0


while l < r:

    current = 0
    num_tracks = 1

    p = (l + r) // 2  # 値を設定

    # 積み込めるか確認
    for w in W:
        if current + w > p:
            num_tracks += 1  # 次のトラックを持ってくる
            current = w
        else:
            current += w
    
    if num_tracks > k:  # 現在の p ではトラックが足りない場合
        l = p + 1  # 最少値を上げる
    else:
        r = p  # 最大値を下げる


print(l) import sys sys import math math n, k = map(int, sys.stdin.readline().split()) n map(int, sys.stdin.readline().split()) map int sys.stdin.readline().split() sys.stdin.readline().split sys.stdin.readline() sys.stdin.readline sys.stdin sys stdin readline split k W = [] W [] for _ in range(n):
    w = int(sys.stdin.readline())
    W.append(w) _ range(n) range n w = int(sys.stdin.readline()) w int(sys.stdin.readline()) int sys.stdin.readline() sys.stdin.readline sys.stdin sys stdin readline W.append(w) W.append W append w r = sum(W) r sum(W) sum W l = max(W) l max(W) max W pre_p = 0 pre_p 0 while l < r:

    current = 0
    num_tracks = 1

    p = (l + r) // 2  # 値を設定

    # 積み込めるか確認
    for w in W:
        if current + w > p:
            num_tracks += 1  # 次のトラックを持ってくる
            current = w
        else:
            current += w
    
    if num_tracks > k:  # 現在の p ではトラックが足りない場合
        l = p + 1  # 最少値を上げる
    else:
        r = p  # 最大値を下げる l < r l r current = 0 current 0 num_tracks = 1 num_tracks 1 p = (l + r) // 2 p (l + r) // 2 l + r l r 2 for w in W:
        if current + w > p:
            num_tracks += 1  # 次のトラックを持ってくる
            current = w
        else:
            current += w
    
     w W if current + w > p:
            num_tracks += 1  # 次のトラックを持ってくる
            current = w
        else:
            current += w
    
     current + w > p current + w current w p num_tracks += 1 num_tracks 1 current = w current w current += w current w if num_tracks > k:  # 現在の p ではトラックが足りない場合
        l = p + 1  # 最少値を上げる
    else:
        r = p  # 最大値を下げる num_tracks > k num_tracks k l = p + 1 l p + 1 p 1 r = p r p print(l) print l W = [] [] W current = 0 0 current current += w w current r = sum(W) sum(W) r w = int(sys.stdin.readline()) int(sys.stdin.readline()) w l = p + 1 p + 1 l k = map(int, sys.stdin.readline().split()) map(int, sys.stdin.readline().split()) k l = max(W) max(W) l pre_p = 0 0 pre_p r = p p r num_tracks += 1 1 num_tracks n, k = map(int, sys.stdin.readline().split()) map(int, sys.stdin.readline().split()) n num_tracks = 1 1 num_tracks p = (l + r) // 2 (l + r) // 2 p current = w w current
import sys
import math

n, k = map(int, sys.stdin.readline().split())

W = []
for _ in range(n):
    w = int(sys.stdin.readline())
    W.append(w)

r = sum(W)
l = max(W)
pre_p = 0


while l < r:

    current = 0
    num_tracks = 1

    p = (l + r) // 2  # 値を設定

    # 積み込めるか確認
    for w in W:
        if current + w > p:
            num_tracks += 1  # 次のトラックを持ってくる
            current = w
        else:
            current += w
    
    if num_tracks > k:  # 現在の p ではトラックが足りない場合
        l = p + 1  # 最少値を上げる
    else:
        r = p  # 最大値を下げる


print(l)
