#include <bits/stdc++.h>
using namespace std;
inline void rd(int &x) {
  x = 0;
  register char c = getchar();
  while (c < '0' || c > '9') c = getchar();
  while (c >= '0' && c <= '9') {
    x = x * 10 + c - 48;
    c = getchar();
  }
}
struct edge {
  int to, nxxt;
} e[110002 << 1];
struct node {
  int l, r, id;
} b[110002];
int n, m, fa[110002], Q, head[110002], cnt = 1, ans[110002], blk, lx[110002],
                                       rx[110002], bel[110002], cn,
                                       s[2002][2002], tot[2002], nxt[110002];
int fn[110002];
bool ban[110002];
inline void ins(int u, int v) {
  e[cnt] = (edge){v, head[u]};
  head[u] = cnt++;
}
inline bool cmp(node n1, node n2) { return n1.l < n2.l; }
inline void bt(int x) {
  tot[x] = 0;
  for (register int i = rx[x]; i >= lx[x]; i--)
    if (!ban[i]) {
      while (tot[x] && i < fa[s[x][tot[x]]]) tot[x]--;
      if (tot[x])
        nxt[i] = s[x][tot[x]];
      else
        nxt[i] = 0;
      while (tot[x] && fa[i] <= fa[s[x][tot[x]]]) tot[x]--;
      s[x][++tot[x]] = i;
    }
  for (register int i = rx[x]; i >= lx[x]; i--)
    if (!ban[i]) {
      if (nxt[i])
        fn[i] = fn[nxt[i]];
      else
        fn[i] = i;
    }
}
int main() {
  rd(n), rd(m);
  for (int i = 1; i <= m; i++) {
    int x, y;
    rd(x), rd(y);
    if (x ^ y) fa[y] = x, ins(x, y);
  }
  rd(Q);
  for (int i = 1; i <= Q; i++) rd(b[i].l), rd(b[i].r), b[i].id = i;
  blk = 750;
  sort(b + 1, b + 1 + Q, cmp);
  for (int i = 1, j; i <= n; i = j + 1) {
    j = min(n, i + blk - 1);
    lx[++cn] = i, rx[cn] = j;
    for (int ii = i; ii <= j; ii++) bel[ii] = cn;
  }
  for (int i = 1; i <= n; i++)
    if (!fa[i]) ban[i] = 1;
  for (int i = 1; i <= cn; i++) bt(i);
  int t = 1;
  for (int i = 1; i <= Q; i++) {
    while (t < b[i].l) {
      for (int j = head[t]; j; j = e[j].nxxt) {
        ban[e[j].to] = 1;
        bt(bel[e[j].to]);
      }
      t++;
    }
    if (bel[b[i].r] - bel[b[i].l] <= 1) {
      int va = b[i].l;
      for (register int j = b[i].l + 1; j <= b[i].r; j++) {
        if (fa[j] >= b[i].l && fa[j] <= va) va = j;
      }
      ans[b[i].id] = va;
      continue;
    }
    int va = b[i].l;
    for (register int j = b[i].l + 1; j <= rx[bel[b[i].l]]; j++) {
      if (fa[j] >= b[i].l && fa[j] <= va) va = j;
    }
    for (register int j = bel[b[i].l] + 1; j < bel[b[i].r]; j++) {
      int l = 1, r = tot[j], mid, tas = 0;
      while (l <= r) {
        mid = (l + r) >> 1;
        if (fa[s[j][mid]] <= va)
          tas = mid, l = mid + 1;
        else
          r = mid - 1;
      }
      if (tas) va = fn[s[j][tas]];
    }
    for (register int j = lx[bel[b[i].r]]; j <= b[i].r; j++) {
      if (fa[j] >= b[i].l && fa[j] <= va) va = j;
    }
    ans[b[i].id] = va;
  }
  for (int i = 1; i <= Q; i++) printf("%d\n", ans[i]);
  cerr << clock() << endl;
}
