# coding: utf-8
# Your code here!

# 最大積載量p でk台のトラックに全ての荷物を積載できるかチェックする
def check(p):
  global n, k, w

  # k台のトラックに積載済の荷物の個数
  i = 0

  # k台のトラックに順番に荷物を積載する
  for j in range(k):
    # j台目のトラックの積載量の合計
    s = 0

    # 積載量の合計が 最大積載量p を超えるまで荷物を積み込む
    while (s + w[i] <= p):
      s += w[i]
      
      # トラックに積載済の荷物の個数をカウントアップ
      i += 1

      # 最大積載量p で すべての荷物を積み込めた場合
      if (i == n):
        return True

  # 最大積載量p で すべての荷物を積み込めなかった場合
  return False


# メイン処理
def solve():
  global n

  # 積載量の下限
  left = 0

  # 積載量の上限（個数の最大値 × 重量の最大値）
  right = 100000 * 10000

  while (1 < right - left):
    # 最大積載量p
    p = int((left + right) / 2)

    if check(p):
      # 最大積載量pで全ての荷物が積み込めた場合、p より小さい範囲を探索
      right = p
    else:
      # 最大積載量pで全ての荷物が積み込めなかった場合、p より大きい範囲を探索
      left = p
  
  # 全ての荷物を積み込むことができた最小の最大積載量を返却する
  return right

n, k = map(int, input().split())
w = [int(input()) for i in range(n)]
print(solve()) def check(p):
  global n, k, w

  # k台のトラックに積載済の荷物の個数
  i = 0

  # k台のトラックに順番に荷物を積載する
  for j in range(k):
    # j台目のトラックの積載量の合計
    s = 0

    # 積載量の合計が 最大積載量p を超えるまで荷物を積み込む
    while (s + w[i] <= p):
      s += w[i]
      
      # トラックに積載済の荷物の個数をカウントアップ
      i += 1

      # 最大積載量p で すべての荷物を積み込めた場合
      if (i == n):
        return True

  # 最大積載量p で すべての荷物を積み込めなかった場合
  return False


# メイン処理 check global n, k, w i = 0 i 0 for j in range(k):
    # j台目のトラックの積載量の合計
    s = 0

    # 積載量の合計が 最大積載量p を超えるまで荷物を積み込む
    while (s + w[i] <= p):
      s += w[i]
      
      # トラックに積載済の荷物の個数をカウントアップ
      i += 1

      # 最大積載量p で すべての荷物を積み込めた場合
      if (i == n):
        return True

  # 最大積載量p で すべての荷物を積み込めなかった場合
   j range(k) range k s = 0 s 0 while (s + w[i] <= p):
      s += w[i]
      
      # トラックに積載済の荷物の個数をカウントアップ
      i += 1

      # 最大積載量p で すべての荷物を積み込めた場合
      if (i == n):
        return True

  # 最大積載量p で すべての荷物を積み込めなかった場合
   s + w[i] <= p s + w[i] s w[i] w i p s += w[i] s w[i] w i i += 1 i 1 if (i == n):
        return True

  # 最大積載量p で すべての荷物を積み込めなかった場合
   i == n i n return True True return False False p p def solve():
  global n

  # 積載量の下限
  left = 0

  # 積載量の上限（個数の最大値 × 重量の最大値）
  right = 100000 * 10000

  while (1 < right - left):
    # 最大積載量p
    p = int((left + right) / 2)

    if check(p):
      # 最大積載量pで全ての荷物が積み込めた場合、p より小さい範囲を探索
      right = p
    else:
      # 最大積載量pで全ての荷物が積み込めなかった場合、p より大きい範囲を探索
      left = p
  
  # 全ての荷物を積み込むことができた最小の最大積載量を返却する
  return right solve global n left = 0 left 0 right = 100000 * 10000 right 100000 * 10000 100000 10000 while (1 < right - left):
    # 最大積載量p
    p = int((left + right) / 2)

    if check(p):
      # 最大積載量pで全ての荷物が積み込めた場合、p より小さい範囲を探索
      right = p
    else:
      # 最大積載量pで全ての荷物が積み込めなかった場合、p より大きい範囲を探索
      left = p
  
  # 全ての荷物を積み込むことができた最小の最大積載量を返却する
   1 < right - left 1 right - left right left p = int((left + right) / 2) p int((left + right) / 2) int (left + right) / 2 left + right left right 2 if check(p):
      # 最大積載量pで全ての荷物が積み込めた場合、p より小さい範囲を探索
      right = p
    else:
      # 最大積載量pで全ての荷物が積み込めなかった場合、p より大きい範囲を探索
      left = p
  
  # 全ての荷物を積み込むことができた最小の最大積載量を返却する
   check(p) check p right = p right p left = p left p return right right n, k = map(int, input().split()) n map(int, input().split()) map int input().split() ().split () input split k int(input()) for i in range(n) for i in range(n) i range(n) range n for i in range(n) int(input()) int input() input w = [int(input()) for i in range(n)] w [int(input()) for i in range(n)] print(solve()) print solve() solve def solve():
  global n

  # 積載量の下限
  left = 0

  # 積載量の上限（個数の最大値 × 重量の最大値）
  right = 100000 * 10000

  while (1 < right - left):
    # 最大積載量p
    p = int((left + right) / 2)

    if check(p):
      # 最大積載量pで全ての荷物が積み込めた場合、p より小さい範囲を探索
      right = p
    else:
      # 最大積載量pで全ての荷物が積み込めなかった場合、p より大きい範囲を探索
      left = p
  
  # 全ての荷物を積み込むことができた最小の最大積載量を返却する
  return right def solve():
  global n

  # 積載量の下限
  left = 0

  # 積載量の上限（個数の最大値 × 重量の最大値）
  right = 100000 * 10000

  while (1 < right - left):
    # 最大積載量p
    p = int((left + right) / 2)

    if check(p):
      # 最大積載量pで全ての荷物が積み込めた場合、p より小さい範囲を探索
      right = p
    else:
      # 最大積載量pで全ての荷物が積み込めなかった場合、p より大きい範囲を探索
      left = p
  
  # 全ての荷物を積み込むことができた最小の最大積載量を返却する
  return right solve k = map(int, input().split()) map(int, input().split()) k def check(p):
  global n, k, w

  # k台のトラックに積載済の荷物の個数
  i = 0

  # k台のトラックに順番に荷物を積載する
  for j in range(k):
    # j台目のトラックの積載量の合計
    s = 0

    # 積載量の合計が 最大積載量p を超えるまで荷物を積み込む
    while (s + w[i] <= p):
      s += w[i]
      
      # トラックに積載済の荷物の個数をカウントアップ
      i += 1

      # 最大積載量p で すべての荷物を積み込めた場合
      if (i == n):
        return True

  # 最大積載量p で すべての荷物を積み込めなかった場合
  return False


# メイン処理 def check(p):
  global n, k, w

  # k台のトラックに積載済の荷物の個数
  i = 0

  # k台のトラックに順番に荷物を積載する
  for j in range(k):
    # j台目のトラックの積載量の合計
    s = 0

    # 積載量の合計が 最大積載量p を超えるまで荷物を積み込む
    while (s + w[i] <= p):
      s += w[i]
      
      # トラックに積載済の荷物の個数をカウントアップ
      i += 1

      # 最大積載量p で すべての荷物を積み込めた場合
      if (i == n):
        return True

  # 最大積載量p で すべての荷物を積み込めなかった場合
  return False


# メイン処理 check n, k = map(int, input().split()) map(int, input().split()) n w = [int(input()) for i in range(n)] [int(input()) for i in range(n)] w
# coding: utf-8
# Your code here!

# 最大積載量p でk台のトラックに全ての荷物を積載できるかチェックする
def check(p):
  global n, k, w

  # k台のトラックに積載済の荷物の個数
  i = 0

  # k台のトラックに順番に荷物を積載する
  for j in range(k):
    # j台目のトラックの積載量の合計
    s = 0

    # 積載量の合計が 最大積載量p を超えるまで荷物を積み込む
    while (s + w[i] <= p):
      s += w[i]
      
      # トラックに積載済の荷物の個数をカウントアップ
      i += 1

      # 最大積載量p で すべての荷物を積み込めた場合
      if (i == n):
        return True

  # 最大積載量p で すべての荷物を積み込めなかった場合
  return False


# メイン処理
def solve():
  global n

  # 積載量の下限
  left = 0

  # 積載量の上限（個数の最大値 × 重量の最大値）
  right = 100000 * 10000

  while (1 < right - left):
    # 最大積載量p
    p = int((left + right) / 2)

    if check(p):
      # 最大積載量pで全ての荷物が積み込めた場合、p より小さい範囲を探索
      right = p
    else:
      # 最大積載量pで全ての荷物が積み込めなかった場合、p より大きい範囲を探索
      left = p
  
  # 全ての荷物を積み込むことができた最小の最大積載量を返却する
  return right

n, k = map(int, input().split())
w = [int(input()) for i in range(n)]
print(solve())
