#include<iostream>#include<algorithm>usingnamespace std;constint N =1e5+6;int H[N];int W[N];intmain(){//要保证满足k个//要最大 int n,k;
cin>>n>>k;int maxt =-1;//输入的所有长方形中的最大边长 for(int i=1;i<=n;i++){
cin>>H[i]>>W[i];//找到所输入的最大边长 int b =max(H[i],W[i]);if(b>maxt) maxt = b;}int l =1;int r = maxt;int ans =-1;//所能够分成的最大边长 while(l<=r)//这里面是枚举能够分的最大边长 {int mid = l +(r-l)/2;//二分中点,即这里枚举的最大边长 int cnt =0;//cnt的意义为把这些巧克力分成边长为mid的 正方形能分多少个 for(int i=1;i<=n;i++){
cnt +=(H[i]/mid)*(W[i]/mid);}if(cnt<k)//不够k个 {
r = mid -1;}else{
l = mid +1;if(mid>ans) ans = mid;}}
cout<<ans<<endl;return0;}