#include<bits/stdc++.h>
using namespace std;
#define inf 10000000000000005
#define int long long
int N,Q,R,V;
struct ft{
int d,c;
}fun[100105];
int anc[64][100105],strm[64][101005];//j的第2^i级祖先为anc[i][j]
stack<int>s;
vector<int>v[101005];
int dep[110005];
void dfs(int x,int fa){
dep[x]=dep[fa]+1;
//strm[i][x]从x到2^i级祖先的长度(容量)
anc[0][x]=fa,strm[0][x]=fun[fa].c ;
for(int i=1;(i<<1)<=dep[x];i++)anc[i][x]=anc[i-1][anc[i-1][x]],strm[i][x]=strm[i-1][anc[i-1][x]]+strm[i-1][x] ;
for(int i=0;i<v[x].size();i++){
dfs(v[x][i],x);
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>N>>Q;
for(int i=1;i<=N;i++){
cin>>fun[i].d >>fun[i].c ;
}
fun[N+1].c =inf,fun[N+1].d =inf;//倒着来,根在最后
for(int i=1;i<=N+1;i++){
if(i==1){
s.push(i);
continue;
}
while(!s.empty()&&fun[i].d >fun[s.top()].d ){
v[i].push_back(s.top());
s.pop();
}
s.push(i);
}
dfs(N+1,0);
while(Q--){
cin>>R>>V;
if(V<=fun[R].c ){
cout<<R<<"\n";
continue;
}
int total=V-fun[R].c;
int ans=0;
for(int i=20;i>=0;i--){
if(total-strm[i][R]>=0&&(1<<i)<=dep[R]){
total-=strm[i][R];
R=anc[i][R];
}
if(total==0)ans=R;
}
if(ans==0)ans=anc[0][R];
if(ans==N+1)cout<<0<<"\n";
else cout<<ans<<"\n";
}
return 0;
}