#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int n, q, s[N], e[N];
// long long dist[N][N];
vector<int> adj[N];
bool visited[N];
int comp[N], id[N], up[N][18];
map<long long, long long> mp;
int main() {
cin >> n >> q;
vector<pair<pair<int, int>, int>> v;
for (int i = 1; i <= n; i++) {
cin >> s[i] >> e[i];
v.push_back({{s[i], e[i]}, i});
}
sort(v.begin(), v.end(), [&](pair<pair<int,int>, int> A, pair<pair<int,int>, int> B){
auto [l1, r1] = A.first;
auto [l2, r2] = B.first;
if(l1 == l2){
return r1 < r2;
}
return l1 < l2;
});
for(int i = 1; i <= n + 1; i++){
for(int j = 0; j < 18; j++){
up[i][j] = n + 1;
}
}
for(int i = 1; i < n; i++){
auto [l1, r1] = v[i - 1].first;
auto [l2, r2] = v[i].first;
if(l2 <= r1 && r1 <= r2){
up[v[i - 1].second][0] = v[i].second;
}
}
for(int j = 1; j < 18; j++){
for(int i = 1; i <= n; i++){
up[i][j] = up[up[i][j - 1]][j - 1];
}
}
while (q--) {
int u, v;
cin >> u >> v;
int ans = 0;
for(int i = 17; i >= 0; i--){
if(up[u][i] <= v){
u = up[u][i];
ans += (1 << i);
}
}
if(u != v){
cout << "impossible\n";
}else{
cout << ans << endl;
}
}
}