#include <iostream>
using namespace std;
typedef long long ll;
const ll N=1e5+10;
ll n,num,a[N],b[N];
//分的块长度越大,分的块越少。
bool check(ll mid) //本质就是一个已知mid 模拟的过程
{
ll res=0;
for(ll i=0;i<n;i++)
res+=(a[i]/mid)*(b[i]/mid);
return res>=num;
}
int main()
{
scanf("%lld%lld",&n,&num);
for(int i=0;i<n;i++)scanf("%lld%lld",&a[i],&b[i]);
ll l=0,r=1e5+10;
while(l+1<r)
{
ll mid=l+r>>1;
if(check(mid))l=mid;
else r=mid;
}
printf("%lld",l);
return 0;
}