import math

n, k = map(int, input().split())
W = [int(input()) for _ in range(n)]

# 最小の積載量は、最も重い荷物の重さ。または、全荷物の合計をトラック台数で割った数。
minP = max(max(W), math.ceil(sum(W) / k))
# 最大の積載量は、全荷物の合計
maxP = sum(W)

while minP < maxP:
    # 重さの最小値と最大値の半分を、積載量Pと仮定
    midP = (minP + maxP) // 2

    countTrack = 1
    calc = 0
    okFlag = True

    for w in W:
        calc += w
        
        # 積載量を超過した場合
        if calc > midP:
            # 載せずに次のトラックにまわす
            calc = w
            # トラックを1台増加
            countTrack += 1

        # トラックの最大台数を超えていたら、NG
        if countTrack > k:
            okFlag = False
            break

    # トラックの最大台数内で載せきれた場合
    if okFlag:
        # 最大値を狭めて再度処理
        maxP = midP
    else:
        # 最小値を狭めて再度処理
        minP = midP + 1

print(minP) import math math n, k = map(int, input().split()) n map(int, input().split()) map int input().split() ().split () input split k int(input()) for _ in range(n) for _ in range(n) _ range(n) range n for _ in range(n) int(input()) int input() input W = [int(input()) for _ in range(n)] W [int(input()) for _ in range(n)] minP = max(max(W), math.ceil(sum(W) / k)) minP max(max(W), math.ceil(sum(W) / k)) max max(W) max W math.ceil(sum(W) / k) math.ceil math ceil sum(W) / k sum(W) sum W k maxP = sum(W) maxP sum(W) sum W while minP < maxP:
    # 重さの最小値と最大値の半分を、積載量Pと仮定
    midP = (minP + maxP) // 2

    countTrack = 1
    calc = 0
    okFlag = True

    for w in W:
        calc += w
        
        # 積載量を超過した場合
        if calc > midP:
            # 載せずに次のトラックにまわす
            calc = w
            # トラックを1台増加
            countTrack += 1

        # トラックの最大台数を超えていたら、NG
        if countTrack > k:
            okFlag = False
            break

    # トラックの最大台数内で載せきれた場合
    if okFlag:
        # 最大値を狭めて再度処理
        maxP = midP
    else:
        # 最小値を狭めて再度処理
        minP = midP + 1 minP < maxP minP maxP midP = (minP + maxP) // 2 midP (minP + maxP) // 2 minP + maxP minP maxP 2 countTrack = 1 countTrack 1 calc = 0 calc 0 okFlag = True okFlag True for w in W:
        calc += w
        
        # 積載量を超過した場合
        if calc > midP:
            # 載せずに次のトラックにまわす
            calc = w
            # トラックを1台増加
            countTrack += 1

        # トラックの最大台数を超えていたら、NG
        if countTrack > k:
            okFlag = False
            break

    # トラックの最大台数内で載せきれた場合
     w W calc += w calc w if calc > midP:
            # 載せずに次のトラックにまわす
            calc = w
            # トラックを1台増加
            countTrack += 1

        # トラックの最大台数を超えていたら、NG
         calc > midP calc midP calc = w calc w countTrack += 1 countTrack 1 if countTrack > k:
            okFlag = False
            break

    # トラックの最大台数内で載せきれた場合
     countTrack > k countTrack k okFlag = False okFlag False break if okFlag:
        # 最大値を狭めて再度処理
        maxP = midP
    else:
        # 最小値を狭めて再度処理
        minP = midP + 1 okFlag maxP = midP maxP midP minP = midP + 1 minP midP + 1 midP 1 print(minP) print minP countTrack = 1 1 countTrack midP = (minP + maxP) // 2 (minP + maxP) // 2 midP n, k = map(int, input().split()) map(int, input().split()) n k = map(int, input().split()) map(int, input().split()) k minP = max(max(W), math.ceil(sum(W) / k)) max(max(W), math.ceil(sum(W) / k)) minP okFlag = True True okFlag W = [int(input()) for _ in range(n)] [int(input()) for _ in range(n)] W maxP = sum(W) sum(W) maxP calc += w w calc okFlag = False False okFlag calc = w w calc minP = midP + 1 midP + 1 minP calc = 0 0 calc maxP = midP midP maxP countTrack += 1 1 countTrack
import math

n, k = map(int, input().split())
W = [int(input()) for _ in range(n)]

# 最小の積載量は、最も重い荷物の重さ。または、全荷物の合計をトラック台数で割った数。
minP = max(max(W), math.ceil(sum(W) / k))
# 最大の積載量は、全荷物の合計
maxP = sum(W)

while minP < maxP:
    # 重さの最小値と最大値の半分を、積載量Pと仮定
    midP = (minP + maxP) // 2

    countTrack = 1
    calc = 0
    okFlag = True

    for w in W:
        calc += w
        
        # 積載量を超過した場合
        if calc > midP:
            # 載せずに次のトラックにまわす
            calc = w
            # トラックを1台増加
            countTrack += 1

        # トラックの最大台数を超えていたら、NG
        if countTrack > k:
            okFlag = False
            break

    # トラックの最大台数内で載せきれた場合
    if okFlag:
        # 最大値を狭めて再度処理
        maxP = midP
    else:
        # 最小値を狭めて再度処理
        minP = midP + 1

print(minP)
