#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5 , inf = 1e9 + 5 ;
int n , qus ;
int head[N] , lg[N] , f[N][25] , g[N][25] , dep[N] ;
struct node{int d , c ; }plt[N];
struct node2 {int to , nxt ; }e[N];
int cnt = 0 ;
void add(int x , int y)
{
cnt ++ ;
e[cnt].to = y ;
e[cnt].nxt = head[x] ;
head[x] = cnt ;
}
void dfs(int now , int fa)
{
f[now][0] = fa , g[now][0] = plt[fa].c , dep[now] = dep[fa] + 1 ;
for(int i = 1 ; i <= lg[dep[now]] ; i ++)
{
f[now][i] = f[f[now][i - 1]][i - 1] ;
g[now][i] = g[now][i - 1] + g[f[now][i - 1]][i - 1] ;
}
for(int i = head[now] ; i ; i = e[i].nxt)
{
dfs(e[i].to , now) ;
}
}
int main()
{
cin >> n >> qus ;
for(int i = 1 ; i <= n ; i ++)
scanf("%d %d" , &plt[i].d , &plt[i].c) ;
plt[n + 1].d = inf , plt[n + 1].c = inf ;
stack <int> q ;
for(int i = 1 ; i <= n + 1 ; i ++)
{
while(! q.empty() && plt[i].d > plt[q.top()].d) {add(i , q.top()) , q.pop() ; }
q.push(i) ;
}
for(int i = 1 ; i <= n ; i ++) lg[i] = log2(i) ;
dfs(n + 1 , 0) ;
for(int ii = 1 , r , v ; ii <= qus ; ii ++)
{
scanf("%d %d" , &r , &v) ;
if(v <= plt[r].c)
{
printf("%d\n" , r) ;
continue ;
}
v -= plt[r].c ;
for(int i = 20 ; i >= 0 ; i --)
{
if((1 << i) > dep[r] || g[r][i] > v) continue ;
v -= g[r][i] , r = f[r][i] ;
}
int ans ;
if(v == 0) ans = r ;
else ans = f[r][0] ;
if(ans == n + 1) ans = 0 ;
printf("%d\n" , ans) ;
}
return 0;
}