#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int int_fast64_t
#define ul uint_fast32_t
#define ll int_fast64_t
#define dll long double
#define ull uint_fast64_t
#define spektar this_thread::sleep_for(chrono::milliseconds(50))
int log2floor(ull n){ return 63-__builtin_clzll(n); }
const int MAX=2e5+5;
//vector<int> seqtree(4*MAX);
//vector<int> lazy(4*MAX);
vector<vector<int>> up(log2floor(MAX)+1,vector<int>(MAX));
vector<vector<int>> sum(log2floor(MAX)+1,vector<int>(MAX));
/*
void build(int v,int l,int r,vector<int>& k){
if(l==r) seqtree[v]=k[l-1];
else{
int m=(l+r)/2;
build(2*v,l,m,k);
build(2*v+1,m+1,r,k);
seqtree[v]=seqtree[2*v]+seqtree[2*v+1];
}
}
void push(int v,int l,int r){
seqtree[v]+=lazy[v]*(r-l+1);
if(l!=r){
lazy[2*v]+=lazy[v];
lazy[2*v+1]+=lazy[v];
}
lazy[v]=0;
}
void upd(int v,int l,int r,vector<int>& k,int a){
if(l==r) seqtree[v]=k[l-1];
else{
int m=(l+r)/2;
if(a<=m) upd(2*v,l,m,k,a);
else upd(2*v+1,m+1,r,k,a);
seqtree[v]=seqtree[2*v]+seqtree[2*v+1];
}
}
void upd(int v,int l,int r,vector<int>& k,int l1,int r1,int a){
if(l>=l1 && r<=r1){
lazy[v]+=a;
push(v,l,r);
}
else{
if(lazy[v]>0) push(v,l,r);
int m=(l+r)/2;
if(!(l>r1 || m<l1)) upd(2*v,l,m,k,l1,r1,a);
if(!(m+1>r1 || r<l1)) upd(2*v+1,m+1,r,k,l1,r1,a);
seqtree[v]=seqtree[2*v]+seqtree[2*v+1];
}
}
int ask(int v,int l,int r,int l1,int r1){
if(lazy[v]>0) push(v,l,r);
if(r<l1 || l>r1) return 0;
if(l1<=l && r<=r1) return seqtree[v];
else{
int m=(l+r)/2;
return ask(2*v,l,m,l1,r1)+ask(2*v+1,m+1,r,l1,r1);
}
}
*/
void build_st(int n){
for(int i=1; i<=log2floor(MAX); i++){
for(int j=1; j<=n+1; j++){
if(up[i-1][j]!=0){
up[i][j]=up[i-1][up[i-1][j]];
sum[i][j]=sum[i-1][j]+sum[i-1][up[i-1][j]];
}
else{
up[i][j]=0;
sum[i][j]=sum[i-1][j];
}
}
}
}
array<int,2> binlift(int a,int b){
int s=0;
for(int i=log2floor(MAX); i>=0; i--){
if(b&(1<<i)){
s+=sum[i][a];
a=up[i][a];
}
}
return {a,s};
}
void solve(){
int n,m;
cin >> n >> m;
vector<array<int,2>> k(n);
for(auto& [a,b]:k) cin >> a >> b;
stack<int> kk;
for(int i=n-1; i>=0; i--){
sum[0][i+1]=k[i][1];
while(kk.size() && k[kk.top()-1][0]<=k[i][0]) kk.pop();
if(!kk.size()) up[0][i+1]=0;
else up[0][i+1]=kk.top();
kk.push(i+1);
}
build_st(n);
for(int i=0; i<m; i++){
int a,b;
cin >> a >> b;
int l=0,r=n,best=0;
while(l<=r){
int mid=(l+r)/2;
array<int,2> c=binlift(a,mid+1);
if(c[1]>=b){
r=mid-1;
best=binlift(a,mid)[0];
}
else l=mid+1;
}
cout << best << endl;
}
}
signed main(){
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t=1;
//cin >> t;
while(t--){
solve();
}
}