#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
vector<int> vc[N];
vector<pair<int, int> > vQ[N];
int n, m, Q;
int ans[N], t[N * 4];
void build(int k, int l, int r) {
  t[k] = 1ll << 30;
  if (l == r) return;
  int mid = (l + r) / 2;
  build(k * 2, l, mid);
  build(k * 2 + 1, mid + 1, r);
}
void pushdown(int k) {
  t[k * 2] = min(t[k * 2], t[k]);
  t[k * 2 + 1] = min(t[k * 2 + 1], t[k]);
}
void change(int k, int l, int r, int x, int y, int v) {
  if (l == x && r == y) {
    t[k] = min(t[k], v);
    return;
  }
  pushdown(k);
  int mid = (l + r) / 2;
  if (y <= mid)
    change(k * 2, l, mid, x, y, v);
  else if (x > mid)
    change(k * 2 + 1, mid + 1, r, x, y, v);
  else {
    change(k * 2, l, mid, x, mid, v);
    change(k * 2 + 1, mid + 1, r, mid + 1, y, v);
  }
  t[k] = max(t[k * 2], t[k * 2 + 1]);
}
int ask(int k, int l, int r, int p, int v) {
  if (l == r) return (t[k] > v ? l : -1);
  int mid = (l + r) / 2;
  pushdown(k);
  if (p <= l) {
    if (t[k * 2] > v) return ask(k * 2, l, mid, p, v);
    return ask(k * 2 + 1, mid + 1, r, p, v);
  }
  int ans = (p <= mid ? ask(k * 2, l, mid, p, v) : -1);
  return ans == -1 ? ask(k * 2 + 1, mid + 1, r, p, v) : ans;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = (int)(1); i <= (int)(m); i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    if (x ^ y) vc[x].push_back(y);
  }
  scanf("%d", &Q);
  for (int i = (int)(1); i <= (int)(Q); i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    vQ[x].push_back(pair<int, int>(y, i));
  }
  build(1, 1, n);
  for (int i = (int)(n); i >= (int)(1); i--) {
    for (auto j : vc[i]) change(1, 1, n, i, j - 1, j);
    for (auto j : vQ[i]) ans[j.second] = ask(1, 1, n, i, j.first);
  }
  for (int i = (int)(1); i <= (int)(Q); i++) printf("%d\n", ans[i]);
}
