#include <iostream>
using namespace std;
const int MAXN = 2e5 + 10;
int a[MAXN];
int c[MAXN];
int n,q;
int log_2[MAXN];
int st_max[MAXN][30],st_min[MAXN][30];
int f[MAXN][30],g[MAXN][30];
void program_st(){
for(int i = 2;i <= MAXN;i++){
log_2[i] = log_2[i >> 2] + 1;
}
for(int i = 1;i <= n;i++){
st_max[i][0] = st_min[i][0] = a[i];
}
for(int j = 1;(1 << j) <= n;j++){
for(int i = 1;i + (1 << j) - 1 <= n;i++){
st_max[i][j] = max(st_max[i][j - 1],st_max[i + (1 << (j - 1))][j - 1]);
st_min[i][j] = min(st_min[i][j - 1],st_min[i + (1 << (j - 1))][j - 1]);
}
}
}
int query_max(int l,int r){
int k = log_2[r - l + 1];
return max(st_max[l][k],st_max[r - (1 << k) + 1][k]);
}
int query_min(int l,int r){
int k = log_2[r - l + 1];
return min(st_min[l][k],st_min[r - (1 << k) + 1][k]);
}
void program_binary(){
for(int i = 1;i <= n;i++){
int l = i + 1;
int r = n + 1;
while(l < r){
int mid = (l + r) >> 1;
if(query_max(i + 1,mid) <= a[i]){
l = mid + 1;
}
else{
r = mid;
}
f[i][0] = l;
g[i][0] = c[l];
}
}
}
void program_fg(){
for(int i = 1;i<=n;i++){
for(int j = 1;i + (1 << j) - 1<= n;j++){
f[i][j] = f[f[i][j-1]][j-1];
g[i][j] = g[i][j - 1] + g[f[i][j - 1]][j - 1];
}
}
}
void program(){
c[n + 1] = 1e9;
program_st();
program_binary();
f[n][0] = n + 1;
g[n][0] = c[n + 1];
program_fg();
}
int main(){
cin>>n>>q;
for(int i = 1;i<=n;i++){
cin>>a[i]>>c[i];
}
program();
while(q--){
int r,v;
cin>>r>>v;
if(c[r] < v){
v -= c[r];
int lg = log_2[n + 1];
for(int k = lg;k >= 0;k--){
if(g[r][k] < v){
v -= g[r][k];
r = f[r][k];
}
}
if((1 << lg) != n + 1){
r = f[r][0];
}
}
if(r == n + 1){
cout<<0<<endl;
continue;
}
cout<<r<<endl;
}
}