import std.string;
import std.conv;
import std.array;
import std.stdio;
import std.algorithm;
import std.range;
import std.math;
import std.container;
import std.stdio;

void main() {
	int n, k;
	readf("%s %s\n", &n, &k);

	auto a = readln.chomp.split(' ').map!(to!int).array;

	bool f(int x) {
		// 一番長いのをx以下にできるか
		// 全部をx以下にするために切る回数<=k
		long now;

		foreach (e;a) {
			now += (e - 1) / x;
		}

		return now <= k;
	}

	int ng = 0, ok = 10 ^^ 9;
	while (ok - ng > 1) {
		auto middle = (ng + ok) / 2;

		if (f(middle)) {
			ok = middle;
		} else {
			ng = middle;
		}
	}
	writeln(ok);
}
