[n,m]=list(map(int,input().split()))
D=[]
C=[]
for i in range(n):
[x,y]=list(map(int,input().split()))
D.append(x)
C.append(y)
st=[[]]
t=n.bit_length()
for i in range(n):
st[0].append(D[i])
l=1
N=n
#st表的预处理
for i in range(1,t):
st.append([])
N-=l
for j in range(0,N):
st[i].append(max(st[i-1][j],st[i-1][j+l]))
l<<=1
#st表的配套查下标区间最大值函数,此处下标区间为闭区间,即包含D[l]和D[r]
def getmax(l,r):
global st
h=r-l+1
lh=h.bit_length()-1
lenh=1<<lh
return max(st[lh][l],st[lh][r-lenh+1])
#二分法查找半径严格大于下标为x的圆盘半径的最小的下标
def nxtb(x):
global n,st
if(x==n-1):
return 0
key=st[0][x]
l=x
r=n-1
m=0
while(l!=r-1):
m=(l+r)>>1
v=getmax(x,m)
if(v>key):
r=m
else:
l=m
return r
for i in range(m):
[x,y]=list(map(int,input().split()))
ans=0
x-=1#题目的圆盘编号是下标+1,后面x+1同理
y-=C[x]
if(y<=0):
print(x+1)
continue
while(True):
x=nxtb(x)
if(x==0):
ans=0
break
ans=x+1
y-=C[x]
if(y<=0):
break
print(ans)
#5,#8,#9,#11~15TLE,其它通过而且时间充裕