#include <bits/stdc++.h>
int N, M, Q, O[100002], T[262145];
std::vector<int> V[100002];
std::vector<std::pair<int, int> > VQ[100002];
void B(int p, int l, int r) {
  T[p] = 1000000000;
  if (l == r) return;
  int m = (l + r) >> 1;
  B(p << 1, l, m);
  B(p << 1 | 1, m + 1, r);
}
inline void cmin(int &x, int y) {
  if (y < x) x = y;
}
inline void down(int p) {
  cmin(T[p << 1], T[p]);
  cmin(T[p << 1 | 1], T[p]);
}
void P(int p, int l, int r, int L, int R, int w) {
  if (T[p] <= w) return;
  if (L <= l && r <= R) {
    T[p] = w;
    return;
  }
  down(p);
  int m = (l + r) >> 1;
  if (L <= m) P(p << 1, l, m, L, R, w);
  if (R > m) P(p << 1 | 1, m + 1, r, L, R, w);
  T[p] = std::max(T[p << 1], T[p << 1 | 1]);
}
int G(int p, int l, int r, int x, int w) {
  if (T[p] <= w) return -1;
  if (x <= l) {
    while (l < r) {
      int m = (l + r) >> 1;
      down(p);
      if (T[p << 1] > w)
        r = m, p <<= 1;
      else
        l = m + 1, p = p << 1 | 1;
    }
    return l;
  }
  int m = (l + r) >> 1, LA = x <= m ? G(p << 1, l, m, x, w) : -1;
  return ~LA ? LA : G(p << 1 | 1, m + 1, r, x, w);
}
int main() {
  scanf("%d%d", &N, &M);
  for (int i = 1, x, y; i <= M; i++) {
    scanf("%d%d", &x, &y);
    if (x < y) V[x].push_back(y);
  }
  scanf("%d", &Q);
  for (int i = 1, x, y; i <= Q; i++) {
    scanf("%d%d", &x, &y);
    VQ[x].push_back({y, i});
  }
  B(1, 1, N);
  for (int i = N; i; i--) {
    for (int j : V[i]) P(1, 1, N, i, j - 1, j);
    for (auto j : VQ[i]) O[j.second] = G(1, 1, N, i, j.first);
  }
  for (int i = 1; i <= Q; i++) printf("%d\n", O[i]);
  return 0;
}
