#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int N, Q;
cin >> N >> Q;
vector<int> S(N+1), E(N+1);
for (int i = 1; i <= N; i++) cin >> S[i] >> E[i];
int ord[N+1];
iota(ord+1, ord+N+1, 1);
sort(ord+1, ord+N+1, [&E, &S](int a, int b) {return (E[a] > E[b]) || (E[a] == E[b] && S[a] > S[b]);});
while (Q--) {
int s, e;
cin >> s >> e;
priority_queue<pair<int, int>> pq;
int ans = INF;
for (int i = 1; i <= N; i++) {
while (!pq.empty() && S[pq.top().second] > E[ord[i]]) pq.pop();
int val;
if (ord[i] == e) val = 0;
else val = (pq.empty() ? INF : -pq.top().first)+1;
pq.emplace(-val, ord[i]);
if (ord[i] == s) ans = val;
}
if (E[s] == E[e]) ans = min(ans, 1);
if (ans > N) cout << "impossible\n";
else cout << ans << "\n";
}
return 0;
}
/*
5 2
1 3
2 4
4 7
7 9
3 7
1 4
3 2
*/
/*
8 5
1 2
3 4
1 5
6 7
5 10
10 20
15 20
999999999 1000000000
1 6
1 7
2 4
3 3
5 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |