#include<bits/stdc++.h>
#define longint long long
using namespace std;
inline longint read(){
char ch=getchar();int x=0;bool flag=0;
while((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
if(ch=='-') flag=1,ch=getchar();
while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
if(flag) return -x;return x;
}
longint n,q,st[100001],z,f[100001][25],g[100001][25],r,v,nex[100001];
struct asd{
longint d,c;
}a[100001];
void dfs(longint name,longint v){
// if(a[name].c>=v){
// printf("%lld\n",name);
// return;
// }
if(name==n+1){
printf("0\n");return;
}
longint ls=20;
while(ls>=0&&g[name][ls]>v) ls--;
if(ls==-1){
if(f[name][0]==n+1) printf("0\n");
else printf("%lld\n",f[name][0]);
return;
}
dfs(f[name][ls],v-g[name][ls]);
}
int main(){
n=read();q=read();
for(int i=1;i<=n;i++) a[i].d=read(),a[i].c=read();
st[++z]=1;a[n+1].d=2e18;a[n+1].c=2e18;
for(int i=2;i<=n+1;i++){
while(z>0&&a[st[z]].d<a[i].d) nex[st[z]]=i,z--;
st[++z]=i;
}
for(int i=0;i<100001;i++) for(int j=0;j<25;j++) f[i][j]=-1,g[i][j]=2e18;
for(int i=1;i<=n;i++) f[i][0]=nex[i],g[i][0]=a[nex[i]].c;
for(int i=1;(1<<i)<=n;i++){
for(int j=1;j<=n;j++){
if(j+(1<<(i-1))>=n) break;
f[j][i]=f[f[j][i-1]][i-1];
if(f[j][i]==n+1||f[j][i]==-1) break;
g[j][i]=g[j][i-1]+g[f[j][i-1]][i-1];
}
}
while(q--){
r=read();v=read();
if(v-a[r].c<=0) printf("%lld\n",r);
else dfs(r,v-a[r].c);
}
}
样例过了,结果全错,还有两个超时