#include<bits/stdc++.h>
using namespace std;
signed main() {
ios :: sync_with_stdio(0);
cin.tie(0); cout.tie(0);
#define endl "\n"
int n,q;
cin >> n >> q;
vector <int> s(n+1,-1),e(n+1,-1);
for (int i = 1; i <= n; i++) {
cin >> s[i] >> e[i];
}
vector <array<int,3>> r;
for (int i = 1; i <= n; i++) {
r.push_back({s[i],e[i],i});
}
sort(r.begin(),r.end());
vector <int> id(n+1,0);
for (int i = 0; i < n; i++) {
id[r[i][2]] = i;
}
vector <vector<int>> mx(n+1,vector<int>(20,-1));
for (int i = 0; i < n; i++) {
mx[i][0] = i;
}
auto merge = [&](int a, int b) {
if (a == -1 && b == -1) return -1;
if (b == -1) return a;
if (a == -1) return b;
if (r[a][1] >= r[b][1]) return a;
return b;
};
for (int i = 1; i <= 19; i++) {
for (int j = 0; j + (1<<i)-1 < n; j++) {
// cout << i << " " << j << endl;
mx[j][i] = merge(mx[j][i-1],mx[j+(1<<(i-1))][i-1]);
}
}
auto getmax = [&](int l, int r) {
int lg = log2((r-l+1));
return merge(mx[l][lg],mx[r-(1<<lg)+1][lg]);
};
// for (int i = 1; i <= n; i++) {
// cout << i << " ---> " << id[i] << endl;
// cout << i-1 << " " << mx[i-1][1] << endl;
// }
// cout << getmax(0,2) << endl;
vector <vector<int>> up(n+1,vector<int>(20,-1));
for (int i = 0; i < n; i++) {
int l = 0; int tr = n-1;
int i1 = -1;
while (l <= tr) {
int mid = (l+tr)/2;
// cout << mid << endl;
if (r[mid][0] <= r[i][1]) {
i1 = mid;
l = mid + 1;
} else {
tr = mid - 1;
}
}
// cout << i << " ---> " << i1 << endl;
if (i1 != i) i1 = getmax(i,i1); else i1 = -1;
up[i][0] = i1;
}
for (int i = 1; i <= 19; i++) {
for (int j = 0; j < n; j++) {
if (up[j][i-1] == -1) continue;
up[j][i] = up[up[j][i-1]][i-1];
}
}
// for (int i = 0; i <= 2; i++) {
// for (int j = 0; j < n; j++) {
// cout << i << " " << j << " ---> " << up[j][i] << endl;
// }
// }
while (q--) {
int S,E;
cin >> S >> E;
S = id[S]; E = id[E];
// cout << S << " " << E << endl;
if (r[S][1] > r[E][1]) {
cout << "impossible" << endl;
continue;
}
if (S == E) {
cout << 0 << endl;
continue;
}
int cur = 0;
if (r[E][0] <= r[S][1] && r[S][1] <= r[E][1]) {
cout << cur+1 << endl;
continue;
}
for (int i = 19; i >= 0; i--) {
if (up[S][i] == -1) continue;
if (r[up[S][i]][1] < r[E][0]) {
cur += (1<<i);
S = up[S][i];
}
}
if (r[E][0] <= r[S][1] && r[S][1] <= r[E][1]) {
cout << cur+1 << endl;
continue;
}
cur++;
S = up[S][0];
if (r[E][0] <= r[S][1] && r[S][1] <= r[E][1]) {
cout << cur+1 << endl;
continue;
}
cout << "impossible" << endl;
}
}