#include<stdio.h>
int n;
int k;
long long int l = 0; //左界为0;
long long int r = 1e9; //右界为1e9;
long long int p[500000];
long long int pa(long long int x) {
long long int len = 0;
if (x == 0) return k; //当mid为0时返回k;
for (int i = 1; i <= n; i++) {
len += p[i] / x;
}
return len;
}
int main() {
scanf("%d%d", &n, &k);
for (int i = 1; i <= n; i++) {
scanf("%d", &p[i]);
}
long long int mid;
mid = (l + r) / 2;
while (l <= r) {
int cnt = pa(mid);
if (mid == 1 && cnt < k) { //当mid==1&&cnt<k说明没有满足这个的k,没有答案;
printf("0");
return 0;
}
else if (cnt < k) { //当cnt<k时说明mid过大;让边界r=mid-1,变小一点;
r = mid - 1;
}
else if (cnt >= k && mid != 0) { //这样保证了cnt>k的来源是存在解的;
l = mid + 1;
}
else { //mid=0,是一定是一个解,但也要判断1是不是解 如0 1 mid=0;
l = mid + 1;
}
mid = (l + r) / 2;//这个位置很重要:先判断前一个mid满足让l=mid+1,后一个mid
} //不满足让r=mid-1,这样可以保证这个mid是对的,并且这个mid
printf("%lld", mid); //使得第三个mid与第一个mid相等,并将其为答案;
return 0;
}
/*-说明:只要cnt>k出现了l一定变大,这样其实一定能找到莫个cnt是的成立
cnt=k有两种情况1.当mid=0,因为0肯定满足,所以可以让l=mid+1,找还有没有这样的值
如果有就找到 2.存在cnt=k,就可以向前找知道l>r就可以找出最大值满足这个条件*/