#include <bits/stdc++.h>
#define int long long
using namespace std;
int const M = 1e18 + 1e9 + 9;
void solve() {
int n, q;
cin >> n >> q;
vector <vector <int> > v(n, vector <int> (3));
for (int i = 0; i < n; i ++) {
cin >> v[i][1] >> v[i][0];
v[i][2] = i;
}
sort(v.begin(), v.end());
int gr[n];
int a[n][2];
vector <vector <int>> v1;
for (int i = 0; i < n; i ++) {
int i1 = i, mn = M;
while (i1 < n && v[i][0] == v[i1][0]) mn = min(mn, v[i1][1]), gr[v[i1][2]] = v1.size(), a[v[i1][2]][0] = v[i1][1], a[v[i1][2]][1] = v[i1][1], i1 ++;
v1.push_back({v[i][0], mn});
i = i1 - 1;
}
int n1 = v1.size();
int sp[n1][20], lg[n1 + 1];
lg[0] = -1;
for (int i = 1; i <= n1; i ++) lg[i] = lg[i / 2] + 1;
for (int i = 0; i < n1; i ++) sp[i][0] = v1[i][1];
for (int j = 1; j < 20; j ++) {
for (int i = 0; i + (1 << j) - 1 < n1; i ++) {
sp[i][j] = min(sp[i][j - 1], sp[i + (1 << (j - 1))][j - 1]);
}
}
auto get = [&](int l, int r) {
int len = r - l + 1, i = lg[len];
return(min(sp[l][i], sp[r - (1 << i) + 1][i]));
};
while (q --) {
int s, e;
cin >> s >> e;
s --, e --;
int cnt = (s == e ? -1 : 0);
int l = a[e][0];
s = gr[s], e = gr[e];
if (s > e) l = -1;
while (l > v1[s][0]) {
cnt ++;
int lb = s, ub = e;
while (ub - lb > 1) {
int m = (ub + lb) / 2;
if (v1[m][0] < l) lb = m;
else ub = m;
}
int mnl = get(ub, e);
if (mnl == l) l = -1;
else l = mnl;
}
if (l == -1) cout << "impossible\n";
else cout << cnt + 1 << '\n';
}
return ;
}
signed main() {
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t = 1;
// cin >> t;
while (t --) solve();
return 0;
}