#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
const int LOG = 17;
int N, Q;
long long D[MAXN], C[MAXN];
int nextGreater[MAXN];
int up[LOG][MAXN];
long long sumCap[LOG][MAXN];
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> N >> Q;
for (int i = 1; i <= N; i++)
cin >> D[i] >> C[i];
// Next Greater
stack<int> st;
for (int i = N; i >= 1; i--) {
while (!st.empty() && D[st.top()] <= D[i])
st.pop();
nextGreater[i] = st.empty() ? 0 : st.top();
st.push(i);
}
// level 0
for (int i = 1; i <= N; i++) {
up[0][i] = nextGreater[i];
sumCap[0][i] = C[i];
}
// binary lifting
for (int k = 1; k < LOG; k++) {
for (int i = 1; i <= N; i++) {
int mid = up[k-1][i];
if (mid == 0) {
up[k][i] = 0;
sumCap[k][i] = sumCap[k-1][i];
} else {
up[k][i] = up[k-1][mid];
sumCap[k][i] = sumCap[k-1][i] + sumCap[k-1][mid];
}
}
}
while (Q--) {
int R;
long long V;
cin >> R >> V;
int cur = R;
for (int k = LOG-1; k >= 0; k--) {
if (cur != 0 && sumCap[k][cur] <= V) {
V -= sumCap[k][cur];
cur = up[k][cur];
}
}
cout << cur << "\n";
}
return 0;
}