#方針
# 最大積載量pのとき、k台のトラックでどこまで積めるか探索していく
#二分探索していく。rightの初期値は10,000*100,000
# あるpを選んだときに、k台のトラックで積める個数がnよりも大きかったら探索テーブルの左
# あるpを選んだときに、k台のトラックで積める個数がnよりも小さかったら探索テーブルの右

$n, $k = gets.split.map(&:to_i)
$w = Array.new($n){gets.to_i}

#最大積載量pのとき、k台のトラックで何個の荷物を積めるか返す関数
def f(p)
  cur = 0 #積荷の何個目を積み込もうとしているか
  truck = Array.new($k){p} #各トラックにあと何キロ積めるか

  truck.each_with_index do |t, i|
    while $w[cur] && truck[i] - $w[cur] >= 0
      truck[i] = truck[i] - $w[cur]
      cur += 1
    end
  end
  return cur
end


def binary_search()
  left = 0
  right = 100000*10000
  while (right-1 > left)
    mid = (left+right)/2
    tmp = f(mid)
    if tmp >= $n
      right = mid
    else
      left = mid
    end
  end
  return right
end

p binary_search
