#include <bits/stdc++.h>
using namespace std;
const int maxn = 100000, maxq = 100000;
int n, m, Q, Ls[maxn + 5], ans[maxq + 5];
vector<pair<int, int>> q[maxn + 5];
int MAX[(maxn << 2) + 5], lst[(maxn << 2) + 5], TA[(maxn << 2) + 5],
    TB[(maxn << 2) + 5];
inline void Fix(int p, int x) {
  if (x > MAX[p])
    lst[p] = MAX[p], MAX[p] = x;
  else if (x < MAX[p] && x > lst[p])
    lst[p] = x;
}
inline void Pushup(int p) {
  MAX[p] = -2e9;
  Fix(p, MAX[p << 1]);
  Fix(p, lst[p << 1]);
  Fix(p, MAX[p << 1 | 1]);
  Fix(p, lst[p << 1 | 1]);
}
void Build(int l, int r, int p = 1) {
  if (l == r) {
    MAX[p] = l;
    lst[p] = -2e9;
    return;
  }
  int mid = l + (r - l >> 1);
  Build(l, mid, p << 1);
  Build(mid + 1, r, p << 1 | 1);
  Pushup(p);
}
inline void Addtag(int p, int A, int B) {
  if (MAX[p] >= A) {
    MAX[p] = B;
    if (!TA[p]) TA[p] = A;
    TB[p] = B;
  }
}
inline void Pushdown(int p) {
  if (TA[p])
    Addtag(p << 1, TA[p], TB[p]), Addtag(p << 1 | 1, TA[p], TB[p]),
        TA[p] = TB[p] = 0;
}
void Insert(int L, int R, int A, int B, int l = 1, int r = n, int p = 1) {
  if (MAX[p] < A) return;
  if (L == l && r == R && lst[p] < A) return Addtag(p, A, B);
  int mid = l + (r - l >> 1);
  Pushdown(p);
  if (R <= mid)
    Insert(L, R, A, B, l, mid, p << 1);
  else if (L > mid)
    Insert(L, R, A, B, mid + 1, r, p << 1 | 1);
  else
    Insert(L, mid, A, B, l, mid, p << 1),
        Insert(mid + 1, R, A, B, mid + 1, r, p << 1 | 1);
  Pushup(p);
}
int Ask(int pos, int l = 1, int r = n, int p = 1) {
  if (l == r) return MAX[p];
  int mid = l + (r - l >> 1);
  Pushdown(p);
  if (pos <= mid) return Ask(pos, l, mid, p << 1);
  return Ask(pos, mid + 1, r, p << 1 | 1);
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1, x, y; i <= m; i++) scanf("%d%d", &x, &y), Ls[y] = x;
  scanf("%d", &Q);
  for (int i = 1, x, y; i <= Q; i++)
    scanf("%d%d", &x, &y), q[y].push_back(make_pair(x, i));
  for (int i = (Build(1, n), 1); i <= n; i++) {
    if (Ls[i]) Insert(1, Ls[i], Ls[i], i);
    for (int si = q[i].size(), j = 0; j < si; j++)
      ans[q[i][j].second] = Ask(q[i][j].first);
  }
  for (int i = 1; i <= Q; i++) printf("%d\n", ans[i]);
  return 0;
}
