#include <iostream>
#include <vector>
#include <stack>
using namespace std;
const int LOG = 18;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int N, Q;
if (!(cin >> N >> Q)) return 0;
vector<int> D(N + 1), C(N + 1);
for (int i = 1; i <= N; i++) {
cin >> D[i] >> C[i];
}
vector<vector<int>> up(N + 1, vector<int>(LOG, 0));
vector<vector<long long>> cap(N + 1, vector<long long>(LOG, 0));
stack<int> st;
for (int i = N; i >= 1; i--) {
while (!st.empty() && D[st.top()] <= D[i]) {
st.pop();
}
if (!st.empty()) {
up[i][0] = st.top();
} else {
up[i][0] = 0;
}
cap[i][0] = C[i];
st.push(i);
}
for (int j = 1; j < LOG; j++) {
for (int i = 1; i <= N; i++) {
int next_node = up[i][j - 1];
up[i][j] = up[next_node][j - 1];
cap[i][j] = cap[i][j - 1] + cap[next_node][j - 1];
}
}
for (int q = 0; q < Q; q++) {
int R;
long long V;
cin >> R >> V;
int curr = R;
for (int j = LOG - 1; j >= 0; j--) {
if (up[curr][j] != 0 && V > cap[curr][j]) {
V -= cap[curr][j];
curr = up[curr][j];
}
}
if (V > cap[curr][0]) {
cout << 0 << "\n";
} else {
cout << curr << "\n";
}
}
return 0;
}