#include <bits/stdc++.h>
#define int long long
using namespace std;
long long binary_first_that(long long st, long long dr, const function<bool(long long)> &f)
{
    long long mij;
    while(st <= dr)
    {
        mij = (st+dr)/2;
        if(f(mij)) dr = mij - 1;
        else st = mij + 1;
    }
    return dr+1;
}
int d[100005],v[100005];
vector<int> dsort;
int up[100005][19];
int sum[100005][19];
int upWith(int node, int x)
{
    for(; x; x ^= (x&-x))
        node = up[node][__builtin_ctzll(x)];
    return node;
}
int sumWith(int node, int x)
{
    int res = 0;
    for(; x; x ^= (x&-x))
    {
        res += sum[node][__builtin_ctzll(x)];
        node = up[node][__builtin_ctzll(x)];
    }
    return res + v[node];
}
signed main()
{
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    int n,q; cin>>n>>q;
    for(int i=1; i<=n; ++i)
    {
        cin>>d[i]>>v[i];
        dsort.push_back(d[i]);
    }
//    sort(dsort.begin(), dsort.end());
//    dsort.erase(unique(dsort.begin(), dsort.end()), dsort.end());
//    for(int i=1; i<=n; ++i)
//        d[i] = lower_bound(dsort.begin(), dsort.end(), d[i]) - dsort.begin() + 1;
    d[n+1] = 2e9;
    v[n+1] = 2e9;
    stack<int> st({n+1});
    for(int i=n; i>0; --i)
    {
        while(d[st.top()] <= d[i])
            st.pop();
        int father = st.top();
        up[i][0] = father;
        sum[i][0] = v[father];
        st.push(i);
//        cout<<i<<' '<<father<<'\n';
    }
    up[n+1][0] = n+1;
    sum[n+1][0] = 0;
    for(int i=1; i<=18; ++i)
        for(int j=1; j<=n; ++j)
        {
            up[j][i] = up[up[j][i-1]][i-1];
            sum[j][i] = sum[j][i-1] + sum[up[j][i-1]][i-1];
        }
    while(q--)
    {
        int node, val; cin>>node>>val;
        int dist = binary_first_that(0, n, [&node,&val](int x){return sumWith(node,x) >= val;});
        int ans = upWith(node, dist);
        cout<<(ans == n+1 ? 0 : ans)<<'\n';
    }
    return 0;
}
/*
6 5
4 10
6 8
3 5
4 14
10 9
4 20
1 25
6 30
5 8
3 13
2 8
*/
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |