#include //#include using namespace std; //using namespace atcoder; using ll = long long; //using mint = modint998244353; int main(){ cin.tie(nullptr); ios_base::sync_with_stdio(false); /* 町iにいる時、H_j<=T_i以下であるような町jのうち、T_jが最大であるものに行くのが最適でそれ以外は考慮しなくて良い。 よって、各町からk回移動したあとの行き先がダブリングによりO(log k)で求まる。 クエリには、Aからスタートして初めてTがH_B以上となる回数をO(log N)で求める。 */ int N, mx=-1, argmx=-1; cin >> N; vector H(N), T(N); vector> v; queue> que; vector dp(20, vector(N)); for (int i=0; i> H[i]; for (int i=0; i> T[i]; v.push_back({H[i], i}); } sort(v.begin(), v.end()); for (auto &z : v) que.push(z); v.clear(); for (int i=0; i mx){ mx = T[y]; argmx = y; } } dp[0][v[i].second] = argmx; } for (int i=0; i> Q; while(Q--){ cin >> s >> t; s--; t--; int ans=0; if (H[t] <= T[s]) cout << 1 << '\n'; else{ for (int i=19; i>=0; i--){ if (T[dp[i][s]] < H[t]){ s = dp[i][s]; ans += (1< N) cout << -1 << '\n'; else cout << ans+2 << '\n'; } } return 0; }