#include <bits/stdc++.h>
using namespace std;
int read() {
  int x = 0, pos = 1;
  char ch = getchar();
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-') pos = 0;
  for (; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0';
  return pos ? x : -x;
}
const int N = 2e5 + 200;
struct node {
  int l, r, id;
} p[N];
int cmp(node a, node b) { return a.r < b.r; }
pair<int, int> d[N * 2], tag[N * 2];
vector<int> G[N];
int f[112][N], g[N];
int c[N], B, maxr, n, m;
int tmp[10];
void pushup(int now) {
  tmp[0] = d[now << 1].first, tmp[1] = d[now << 1].second;
  tmp[2] = d[now << 1 | 1].first;
  tmp[3] = d[now << 1 | 1].second;
  sort(tmp, tmp + 4);
  d[now].first = tmp[3];
  d[now].second = tmp[2] == tmp[3] ? tmp[1] : tmp[2];
}
void pusht(int now, pair<int, int> w) {
  if (d[now].first >= w.first) {
    d[now].first = w.second;
    if (!tag[now].first) {
      tag[now].first = w.first;
    } else
      tag[now].first = min(tag[now].first, w.first);
    tag[now].second = w.second;
  }
}
void pushdown(int now) {
  if (tag[now].first) {
    pusht(now << 1, tag[now]);
    pusht(now << 1 | 1, tag[now]);
    tag[now] = make_pair(0, 0);
  }
}
void modify(int now, int l, int r, int ql, int qr, pair<int, int> w) {
  if (d[now].first < w.first) return;
  if (ql <= l && r <= qr && d[now].second < w.first) {
    pusht(now, w);
    return;
  }
  int mid = (l + r) >> 1;
  pushdown(now);
  if (ql <= mid) modify(now << 1, l, mid, ql, qr, w);
  if (mid < qr) modify(now << 1 | 1, mid + 1, r, ql, qr, w);
  pushup(now);
}
int query(int now, int l, int r, int pos) {
  if (l == r) {
    return d[now].first;
  }
  int mid = (l + r) >> 1;
  pushdown(now);
  if (pos <= mid)
    return query(now << 1, l, mid, pos);
  else
    return query(now << 1 | 1, mid + 1, r, pos);
}
void build(int now, int l, int r) {
  if (l == r) {
    d[now].first = l;
    d[now].second = -1e9;
    return;
  }
  int mid = (l + r) >> 1;
  build(now << 1, l, mid);
  build(now << 1 | 1, mid + 1, r);
  pushup(now);
}
int ans[N];
int main() {
  n = read(), m = read();
  for (int i = 1; i <= m; ++i) {
    int x = read(), y = read();
    g[y] = x;
  }
  int q = read();
  for (int i = 1; i <= q; ++i) {
    p[i].l = read(), p[i].r = read(), p[i].id = i;
  }
  sort(p + 1, p + q + 1, cmp);
  int pos = 0;
  build(1, 1, n);
  for (int i = 1; i <= n; ++i) {
    if (g[i]) {
      modify(1, 1, n, 1, g[i], make_pair(g[i], i));
    }
    while (pos + 1 <= q && p[pos + 1].r <= i) {
      pos++;
      ans[p[pos].id] = query(1, 1, n, p[pos].l);
    }
  }
  for (int i = 1; i <= q; ++i) {
    printf("%d\n", ans[i]);
  }
  return 0;
}
