#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f3f3f3f3f
#define ll long long
#define N 100009
#define calc(x) (1<<(x))
ll n,q,x,y,lg[N],lst[N],dep[N],fa[N][20],sum[N][20];
struct node{ll u,v;}a[N];
vector<ll>e[N];
stack<ll>stk;
ll read()
{
ll res=0,flag=1;char ch=getchar();
while(ch<'0'||ch>'9') flag*=((ch=='-')?(-1):(1)),ch=getchar();
while(ch>='0'&&ch<='9') res=res*10+ch-'0',ch=getchar();
return res*flag;
}
void write(ll res)
{
if(res<0) putchar('-'),res=-res;
if(res>9) write(res/10);
putchar(res%10+'0');
}
void dfs(ll id,ll pos)
{
fa[id][0]=lst[id],sum[id][0]=a[id].v,dep[id]=pos;
for(ll i=0;i<e[id].size();i++) dfs(e[id][i],pos+1);
}
ll check(ll id,ll pos,ll key)
{
ll l=0,r=pos,res=0;
while(l<=r)
{
ll mid=(l+r)>>1;
if(sum[id][mid]<=key) res=mid,l=mid+1;
else r=mid-1;
}
return res;
}
int main()
{
n=read(),q=read(),a[n+1]={INF,INF},lst[n+1]=n+1,lg[0]=-1;
for(ll i=1;i<=n;i++) lg[i]=lg[i>>1]+1;
for(ll i=1;i<=n;i++) a[i].u=read(),a[i].v=read();
for(ll i=1;i<=n+1;i++)
{
while(!stk.empty()&&a[stk.top()].u<a[i].u)
{
lst[stk.top()]=i;
e[i].push_back(stk.top());
stk.pop();
}
stk.push(i);
}
dfs(n+1,0);
for(ll j=1;j<=18;j++)
for(ll i=1;calc(j)<=dep[i];i++)
{
fa[i][j]=fa[fa[i][j-1]][j-1];
sum[i][j]=sum[i][j-1]+sum[fa[i][j-1]][j-1];
}
while(q--)
{
x=read(),y=read();
while(x!=n+1&&y>0)
{
ll ans=check(x,lg[dep[x]],y);
//printf("%d~%d %d\n",0,lg[dep[x]],ans);
//printf("在%d(%d)预算内%d->%d\n",y,sum[x][ans],x,fa[x][ans]);
if(sum[x][ans]>=y) y=0;
else y-=sum[x][ans],x=fa[x][ans];
}
write((x==n+1)?(0):(x)),putchar('\n');
}
return 0;
}
P7167,TLE 11个点,WA 4个点,就#4的hack数据是对的……按道理来说,这不应该是O(n log n)的时间复杂度吗,就算WA也不可能T吧……