#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e5+10;
int n,m,u,v;
struct G{
int x,t;
}a[N];
int b[N],c[N],d[N];
bool cmp(G x,G y){
return x.t<y.t;
}
map<int,int>s;
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i].x>>a[i].t;
d[i]=a[i].t;
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++){
s[a[i].t]=i;
}
for(int i=1;i<n;i++){
b[i]=abs(a[i].x-a[i+1].x)/abs(a[i].t-a[i+1].t);
c[i]=b[i];
}
sort(c+1,c+n);
int len=unique(c+1,c+n)-c-1;
int num=0,cnum=0,ccnum=0;
for(int i=1;i<n;i++){
if(b[i]==c[len]) num++;
if(b[i]==c[len-1]) cnum++;
if(len-3>0&&b[i]==c[len-2]) ccnum++;
}
a[n+1].t=1e9+1;
a[0].t=-1;
while(m--){
cin>>u>>v;
u=s[d[u]];
if(v<a[u+1].t&&v>a[u-1].t){//内部
int nV=max(abs(a[u].x-a[u-1].x)/abs(v-a[u-1].t),abs(a[u+1].x-a[u].x)/abs(a[u+1].t-v));
int ok=0;
if(b[u-1]==c[len]) ++ok;
if(b[u]==c[len]) ++ok;
if(num-ok>0){//仍然有
cout<<max(c[len],nV)<<endl;
}else{
ok=0;
if(b[u-1]==c[len-1]) ++ok;
if(b[u]==c[len-1]) ++ok;
if(cnum-ok>0){
cout<<max(c[len-1],nV)<<endl;
}else{
if(len-2<=0) cout<<nV<<endl;
else cout<<max(c[len-2],nV)<<endl;
}
}
}else{//在外部
if(v>a[u+1].t){//在右边二分
int l=u,r=n+1;
while(l<r-1){
int mid=l+r>>1;
if(v>a[mid].t) l=mid;
else r=mid;
}
// l~l+1
int nV1=max(abs(a[u].x-a[l].x)/abs(v-a[l].t),abs(a[l+1].x-a[u].x)/abs(a[l+1].t-v));
int nV2=0;
if(u>1&&u<n) nV2=abs(a[u+1].x-a[u-1].x)/abs(a[u+1].t-a[u-1].t);
int nV=max(nV1,nV2);
int ok=0;
if(b[u-1]==c[len]) ++ok;
if(b[u]==c[len]) ++ok;
if(b[r]==c[len]) ++ok;
//损失ok个最大值
if(num-ok>0){
cout<<max(c[len],nV)<<endl;
}else{
ok=0;
if(b[u-1]==c[len-1]) ++ok;
if(b[u]==c[len-1]) ++ok;
if(b[r]==c[len-1]) ++ok;
if(cnum-ok>0){
cout<<max(c[len-1],nV)<<endl;
}else{
if(len-2<=0){
cout<<nV<<endl;
continue;
}
ok=0;
if(b[u-1]==c[len-2]) ++ok;
if(b[u]==c[len-2]) ++ok;
if(b[r]==c[len-2]) ++ok;
if(ccnum-ok>0){
cout<<max(c[len-2],nV)<<endl;
}else{
if(len-3<=0){
cout<<nV<<endl;
}else{
cout<<max(c[len-3],nV)<<endl;
}
}
}
}
}else{
int l=0,r=u;
while(l<r-1){
int mid=l+r>>1;
if(v>a[mid].t) r=mid;
else l=mid;
}
int nV1=max(abs(a[u].x-a[r].x)/abs(v-a[r].t),abs(a[r+1].x-a[u].x)/abs(a[r+1].t-v));
int nV2=abs(a[u+1].x-a[u-1].x)/abs(a[u+1].t-a[u-1].t);
int nV=max(nV1,nV2);
int ok=0;
if(b[u-1]==c[len]) ++ok;
if(b[u]==c[len]) ++ok;
if(b[r]==c[len]) ++ok;
//损失ok个最大值
if(num-ok>0){
cout<<max(c[len],nV)<<endl;
}else{
ok=0;
if(b[u-1]==c[len-1]) ++ok;
if(b[u]==c[len-1]) ++ok;
if(b[r]==c[len-1]) ++ok;
if(cnum-ok>0){
cout<<max(c[len-1],nV)<<endl;
}else{
if(len-2<=0){
cout<<nV<<endl;
continue;
}
ok=0;
if(b[u-1]==c[len-2]) ++ok;
if(b[u]==c[len-2]) ++ok;
if(b[r]==c[len-2]) ++ok;
if(ccnum-ok>0){
cout<<max(c[len-2],nV)<<endl;
}else{
if(len-3<=0){
cout<<nV<<endl;
}else{
cout<<max(c[len-3],nV)<<endl;
}
}
}
}
}
}
}
return 0;
}