#include <bits/stdc++.h>
using namespace std;
struct node {
  int l, r, lc, rc, d, p;
} lt[2 * 110000];
struct node1 {
  int l, r, id;
} q[110000];
int n, m, L[110000], fa[110000], ans[110000], tl;
bool cmp(node1 x, node1 y) {
  if (x.r < y.r) return 1;
  return 0;
}
void upd(int now) {
  int lc = lt[now].lc, rc = lt[now].rc;
  if (lt[lc].d > lt[rc].d)
    lt[now].d = lt[lc].d, lt[now].p = lt[lc].p;
  else
    lt[now].d = lt[rc].d, lt[now].p = lt[rc].p;
}
void bt(int l, int r) {
  int now = ++tl;
  lt[now].l = l;
  lt[now].r = r;
  if (l < r) {
    int mid = (l + r) / 2;
    lt[now].lc = tl + 1;
    bt(l, mid);
    lt[now].rc = tl + 1;
    bt(mid + 1, r);
    upd(now);
  } else
    lt[now].p = lt[now].d = l;
}
void change(int now, int k, int d) {
  int mid = (lt[now].l + lt[now].r) / 2, lc = lt[now].lc, rc = lt[now].rc;
  if (lt[now].l == lt[now].r) {
    lt[now].d = d;
    return;
  }
  if (mid >= k)
    change(lc, k, d);
  else
    change(rc, k, d);
  upd(now);
}
void query(int now, int l, int r, int &p, int &d) {
  int mid = (lt[now].l + lt[now].r) / 2, lc = lt[now].lc, rc = lt[now].rc;
  if (lt[now].l == l && lt[now].r == r) {
    p = lt[now].p;
    d = lt[now].d;
    return;
  }
  if (mid >= r)
    query(lc, l, r, p, d);
  else if (l > mid)
    query(rc, l, r, p, d);
  else {
    int p1, d1;
    query(lc, l, mid, p1, d1);
    query(rc, mid + 1, r, p, d);
    if (d1 > d) d = d1, p = p1;
  }
}
int find(int x) {
  if (fa[x] != x) {
    int p, d;
    query(1, x, fa[x], p, d);
    if (d > fa[x]) fa[x] = find(p);
  }
  return fa[x];
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; i++) {
    int l, r;
    scanf("%d%d", &l, &r);
    if (r > l) L[r] = l;
  }
  for (int i = 1; i <= n; i++) fa[i] = i;
  scanf("%d", &m);
  for (int i = 1; i <= m; i++) scanf("%d%d", &q[i].l, &q[i].r), q[i].id = i;
  sort(q + 1, q + m + 1, cmp);
  bt(1, n);
  int j = 1;
  for (int i = 1; i <= n; i++) {
    if (L[i]) {
      fa[L[i]] = i;
      change(1, L[i], i);
    }
    while (j <= m && q[j].r == i) {
      ans[q[j].id] = find(q[j].l);
      j++;
    }
  }
  for (int i = 1; i <= m; i++) printf("%d\n", ans[i]);
  return 0;
}
