#include #include int n,k; long* dp; long* inp; long len; int compare(const void* a,const void* b) { if(*((long*)a) < *((long*)b)) return 1; else if(*((long*)a) > *((long*)b)) return -1; else return 0; } void init() { long i = 0; for(i = 1;i <= len;i++) dp[i] = inp[0]/i; } long findans() { qsort(inp,n,sizeof(long),compare); if(k > inp[0]) return 0; init(); int i = 0; long j = 0; for(i = 1;i < n;i++) for(j = inp[i];j > 0;j--) dp[j] += (inp[i]/j); for(j = len;j > 0;j--) if(dp[j] == k) return j; return 0; } int main() { scanf("%d %d",&n,&k); inp = new long[n]; int i = 0; long max; scanf("%ld",&inp[0]); max = inp[0]; for(i = 1;i < n;i++) { scanf("%ld",&inp[i]); if(max < inp[i]) max = inp[i]; } dp = new long[max+1]; len = max; long ans = findans(); printf("%ld",ans); return 0; }