#include <bits/stdc++.h>   #pragma GCC optimize( O3 )   using namespace std;   void init_ios() {     ios_base::sync_with_stdio(0);     cin.tie(0);   }   const int N = (1 << 19);   int n, m, jump[N][20];   pair<int, int> a[N], drz[2 * N];   void add(int v, int val, int ind) {     v += N;     if (val < drz[v].first) return;     drz[v] = {val, ind};     while (v > 1) {       v /= 2;       if (drz[2 * v].first > drz[2 * v + 1].first)         drz[v] = drz[2 * v];       else         drz[v] = drz[2 * v + 1];     }   }   pair<int, int> get(int p, int q) {     p += N;     q += N;     pair<int, int> res;     if (drz[p].first > drz[q].first)       res = drz[p];     else       res = drz[q];     while (p / 2 != q / 2) {       if (p % 2 == 0 && drz[p + 1].first > res.first) res = drz[p + 1];       if (q % 2 == 1 && drz[q - 1].first > res.first) res = drz[q - 1];       p /= 2;       q /= 2;     }     return res;   }   int get_id(int id, int hm) {     for (int i = 0; i < 20; ++i)       if (hm & (1 << i)) id = jump[id][i];     return id;   }   int query(int x, int y) {     int id = get(0, x).second;     if (id == 0) return -1;     if (a[id].second >= y) return 1;     int x1 = 1, x2 = n - 1, x3;     while (x2 - x1 > 1) {       x3 = (x1 + x2) / 2;       int id2 = get_id(id, x3);       if (id2 == 0 || a[id2].second >= y)         x2 = x3;       else         x1 = x3;     }     int id2 = get_id(id, x1);     if (id2 != 0 && a[id2].second >= y) return 1 + x1;     id2 = get_id(id, x2);     if (id2 != 0 && a[id2].second >= y) return 1 + x2;     return -1;   }   int main() {     init_ios();     cin >> n >> m;     for (int i = 1; i <= n; ++i) {       cin >> a[i].first >> a[i].second;       add(a[i].first, a[i].second, i);     }     for (int l = 0; l < 20; ++l) {       for (int i = 1; i <= n; ++i) {         if (l == 0) {           pair<int, int> p = get(a[i].first, a[i].second);           jump[i][l] = p.second;         } else {           jump[i][l] = jump[jump[i][l - 1]][l - 1];         }       }     }     while (m--) {       int x, y;       cin >> x >> y;       cout << query(x, y) <<   n ;     }   }   