#include <iostream>
#include<algorithm>
#define int long long
#define Lson lson[x],l,mid,lson[u]
#define Rson rson[x],mid+1,r,rson[u]
#define Maxn 100005
using namespace std;
struct Member{int x,y;} e[Maxn];
int s[Maxn],d[Maxn];
int lson[Maxn<<6],rson[Maxn<<6],t[Maxn<<6],tot;
void Merge(int &x,int l,int r,int u,int p) {
x=++tot;
lson[x]=lson[u],rson[x]=rson[u];
t[x]=t[u]+1;
if(l == r)return ;
int mid=(l+r)>>1;
if(p<=s[mid])Merge(Lson,p);
else Merge(Rson,p);
}
int query(int x,int l,int r,int u,int L,int R) {
if(L<=s[l]&&s[r]<=R)return t[x]-t[u];
int mid=(l+r)>>1,ans=0;
if(L<=s[mid])ans+=query(Lson,L,R);
if(s[mid+1]<=R)ans+=query(Rson,L,R);
return ans;
}
bool cmp(int it,int is) {
return it<is;
}
int rt[Maxn];
int n,k;
int check(int z) {
int ans=0;
for(int i=1;i<=n;i++)
d[i]=s[i]=e[i].y-z*e[i].x;
sort(s+1,s+1+n,cmp);
rt[0]=lson[0]=rson[0]=t[0]=tot=0;
for(int i=1;i<=n;i++)
Merge(rt[i],1,n,rt[i-1],d[i]),
ans+=((d[i]!=s[1])?query(rt[i],1,n,rt[0],s[1],d[i]-1):0);
return ans;
}
bool cmp0(Member it,Member is) {
return it.x<is.x;
}
signed main()
{
cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>e[i].x>>e[i].y;
sort(e+1,e+1+n,cmp0);
int l=-200000000,r=200000000,mid,ans;
while(l <= r) {
mid=(l+r)>>1;
int op=check(mid);
if(op>=k)l=mid+1,ans=mid;
else r=mid-1;
} cout<<ans;
}