#include <stdio.h>
#include <algorithm>
#include <iostream>
using namespace std;
int K, N = 0;
unsigned long long length[100000];
int check(unsigned long long min)
{
int num = 0;
for (int i = 0; i < K; i++)
{
num += (length[i] / min);
}
return num;
}
int main()
{
cin >> K >> N;
for (int i = 0; i < K; i++)
{
cin >> length[i];
}
/*sort(length, length + K, greater<unsigned long long>());
unsigned long long minArray[10000];
copy(length, length + K, minArray);
while (1)
{
if (check(length, minArray[0]))
{
cout << minArray[0];
return 0;
}
else
{
minArray[0] /= 2;
sort(minArray, minArray + K, greater<unsigned long long>());
// cout << "min ๊ฐ " << minArray[0] << "\n";
}
}*/
sort(length, length + K);
unsigned long long left = 1, right = length[K - 1];
int ans;
//์ด๋ถ ํ์
while (left <= right)
{
long long mid = (left + right) / 2;
//mid๊ฐ์ผ๋ก ์๋์๋ ๋์ค๋ ๋์ ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ค
long long cnt = check(mid);
//mid๊ฐ์ผ๋ก ์๋ผ์ ๋์จ ๋์ ์ ๊ฐ์๊ฐ n์ด์์ด๋ฉด ๋ ํฐ ๊ฐ์ผ๋ก ์๋ผ๋ ๋๋ฏ๋ก left๊ฐ์ด ์์ผ๋ก ๊ฐ๋ค.
//ํ์ฌ ์ต๋ ๊ธธ์ด๋ mid๊ฐ ๋งํผ ์๋ฅธ ๊ฒฝ์ฐ
if (cnt >= N)
{
left = mid + 1;
ans = mid;
}
else
{
//ํ์ฌ mid๊ฐ์ผ๋ก ๋์ ์ ์๋ฅด๋ฉด n๊ฐ๋ฅผ ๋ชป๋ง๋๋ ๊ฒฝ์ฐ
//ํฌ๊ธฐ๋ฅด ์ค์ด๊ธฐ ์ํด right๋ฅผ mid์์ชฝ์ผ๋ก ๋น๊ธด๋ค.
right = mid - 1;
}
}
cout << ans << '\n';
return 0;
}