Загрузка данных


program C;
var
  n, c, i, l, r, m: int64;
  a: array of int64;

function check(x: int64): boolean;
var
  sum, i: int64;
begin
  sum := 0;
  for i := 0 to n - 1 do
  begin
    sum := sum + (a[i] + x - 1) div x; // Целочисленное деление с округлением вверх
    if sum > c then exit(false);       // Досрочный выход, если уже превысили
  end;
  check := true;
end;

begin
  readln(n, c);
  SetLength(a, n);
  l := 1; 
  r := 0;
  
  for i := 0 to n - 1 do
  begin
    read(a[i]);
    if a[i] > r then r := a[i]; // r = максимальное количество страниц
  end;

  // Бинарный поиск
  while l < r do
  begin
    m := (l + r) div 2;
    if check(m) then
      r := m
    else
      l := m + 1;
  end;
  
  writeln(l);
end.