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.