/*
分析:
实在想不出来啥好方法,上网一查,二分?!
好吧,暴力二分吧。
312MS。
2012-07-31 20:56
*/
#include"stdio.h" int MAX(int a,int b) { return a>b?a:b; } int city[500011]; int main() { int n,m; int i; int t_num; int low,up,mid; int temp; while(scanf("%d%d",&n,&m)!=-1) { if(n==-1 && m==-1) break; up=0; for(i=0;i<n;i++) {scanf("%d",&city[i]);up=MAX(up,city[i]);} low=0; temp=-1; while(low<up) { mid=(low+up)>>1; if(temp==mid) break; temp=mid; if(!mid) mid=1; t_num=0; for(i=0;i<n;i++) { t_num+=city[i]/mid; if(city[i]%mid) t_num++; } if(t_num>m) low=mid; else up=mid; } printf("%d\n",up); } return 0; }