#include <bits/stdc++.h>
using namespace std;
#define dbg(x) cerr << #x << ' '; print(x); cerr << endl;
void print(int x) {cerr << x;}
void print(long long x) {cerr << x;}
void print(double x) {cerr << x;}
void print(char x) {cerr << x;}
void print(string x) {cerr << x;}
template <class T> void print(vector <T> x);
template <class T> void print(set <T> x);
template <class T> void print(multiset <T> x);
template <class T, class V> void print(pair <T, V> x);
template <class T> void print(vector <T> x) {cerr << "[ "; for(T i : x) {print(i); cerr << ' ';} cerr << "]";}
template <class T> void print(set <T> x) {cerr << "[ "; for(T i : x) {print(i); cerr << ' ';} cerr << "]";}
template <class T> void print(multiset <T> x) {cerr << "[ "; for(T i : x) {print(i); cerr << ' ';} cerr << "]";}
template <class T, class V> void print(pair <T, V> x) {cerr << '{'; print(x.first); cerr << ", "; print(x.second); cerr << '}';}
#define ll long long
#define MP make_pair
#define OK cerr << "OK\n";
#define all(x) (x).begin(), (x).end()
#define pb push_back
#define ppb pop_back
#define PII pair <int, int>
void fastIO(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
}
const int inf = 1e9 + 5;
const ll inf64 = 1e18 + 5;
const int N = 5005;
int n, q, dist[N][N];
vector <PII> event;
vector <int> G[N];
vector <bool> added;
//vector <vector <int>> dist;
void solve(){
cin >> n >> q;
event.resize(n + 1);
for(int i = 1; i <= n; i++){
cin >> event[i].first >> event[i].second;
// slt.pb({event[i].first, {0, i}});
// slt.pb({event[i].second, {1, i}});
}
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
if(event[i].second >= event[j].first && event[i].second <= event[j].second){
G[i].pb(j);
}
dist[i][j] = -1;
}
}
//dist.assign(n + 1, vector<int>(n + 1, -1));
queue <int> qu;
for(int i = 1; i <= n; i++){
qu.push(i);
dist[i][i] = 0;
added.assign(n + 1, 0);
added[i] = 1;
while(!qu.empty()){
int node = qu.front();
qu.pop();
for(int u : G[node]){
if(dist[i][u] != -1) continue;
dist[i][u] = dist[i][node] + 1;
assert(!added[u]);
added[u] = 1;
qu.push(u);
}
}
}
while(q--){
int u, v;
cin >> u >> v;
if(dist[u][v] == -1){
cout << "impossible\n";
}
else{
cout << dist[u][v] << endl;
}
}
}
int main(){
fastIO();
int TST = 1;
//cin >> TST;
while(TST--) solve();
}