#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <bitset>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <iomanip>
#include <random>
#include <chrono>
#include <cassert>
#include <math.h>
#include <cmath>
#include <string>
#include <cstring>
using namespace std;
#define ll long long
#define fr first
#define sc second
#define pb push_back
const int N = 100005, N1 = 20;
const ll oo = 1000000000000000, MOD = 1000000007;
pair<int, pair<int,int>> p[N1];
int nor_ind[N], pref1[N], pref2[N], up[N][23];
vector<int> g[N];
bool color[N];
vector<pair<int,int>> g1[N];
ll dist[N];
bool ok[5005][5005];
void dfs(int u) {
color[u] = 1;
if (g[u].size() == 0) {
for (int j = 20; j >= 0; --j) {
up[u][j] = 0;
}
}
else {
for (int num : g[u]) {
if (color[num]==0) {
dfs(num);
}
}
up[u][0] = g[u][0];
for (int j = 1; j <= 20; ++j) {
up[u][j] = up[up[u][j - 1]][j - 1];
}
}
}
void solve() {
int n, q;
cin >> n >> q;
for (int i = 1; i <= n; ++i) {
cin >> p[i].fr >> p[i].sc.fr;
p[i].sc.sc = i;
}
sort(p + 1, p + n + 1);
multiset<pair<int,int>> ms;
for (int i = 1; i <= n; ++i) {
ms.insert({ p[i].sc.fr,i });
auto it = ms.end();
--it;
pref1[i] = (*it).sc;
if (i != 1) {
--it;
pref2[i] = (*it).sc;
}
}
for (int i = 1; i <= n; ++i) {
nor_ind[p[i].sc.sc] = i;
int x = upper_bound(p + 1, p + n + 1, pair<int, pair<int, int>>{ p[i].sc.fr, { MOD,MOD } }) - p;
--x;
int mxind = 0;
ll mx = 0;
int mx1ind = pref1[x];
int mx2ind = pref2[x];
if (mx1ind == i) {
if (mx2ind != 0 && p[mx2ind].sc.fr > p[i].sc.fr) {
g[i].pb(mx2ind);
}
}
else {
if (p[mx1ind].sc.fr>p[i].sc.fr) {
g[i].pb(mx1ind);
}
}
}
for (int i = 1; i <= n; ++i) {
if (color[i] == 0) {
dfs(i);
}
}
while (q--) {
int s, e;
cin >> s >> e;
s = nor_ind[s];
e = nor_ind[e];
if (s == e) {
cout << 0 << endl;
continue;
}
int hima = s;
int cnt = 0;
for (int j = 20; j >= 0; --j) {
if (up[hima][j] == 0) {
continue;
}
if (p[up[hima][j]].sc.fr < p[e].sc.fr) {
hima = up[hima][j];
cnt += (1 << j);
}
}
if (p[e].fr <= p[hima].sc.fr && p[hima].sc.fr <= p[e].sc.fr) {
++cnt;
cout << cnt << endl;
continue;
}
cout << "impossible" << endl;
}
}
int main() {
int tt = 1;
//cin >> tt;
while (tt--) {
solve();
}
}