#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 10;
const int INF = 1e9 + 10;
vector<pair<int, int> > w[MAXN];
int a[MAXN];
int ans[MAXN];
int segt[4 * MAXN];
int lazy[4 * MAXN];
void lzu(int id) {
  segt[2 * id + 1] = min(segt[2 * id + 1], lazy[id]);
  segt[2 * id + 2] = min(segt[2 * id + 2], lazy[id]);
  lazy[2 * id + 1] = min(lazy[2 * id + 1], lazy[id]);
  lazy[2 * id + 2] = min(lazy[2 * id + 2], lazy[id]);
  lazy[id] = INF;
}
void update(int id, int L, int R, int l, int r, int val) {
  if (L > r || R < l) {
    return;
  }
  if (L >= l && R <= r) {
    segt[id] = min(segt[id], val);
    lazy[id] = min(lazy[id], val);
    return;
  }
  lzu(id);
  int mid = (L + R) / 2;
  update(2 * id + 1, L, mid, l, r, val);
  update(2 * id + 2, mid + 1, R, l, r, val);
  segt[id] = max(segt[2 * id + 1], segt[2 * id + 2]);
}
int get_res(int id, int L, int R, int l, int r, int val) {
  if (L > r || R < l) {
    return -1;
  }
  if (L >= l && R <= r) {
    if (segt[id] < val) {
      return -1;
    }
    while (L != R) {
      int mid = (L + R) / 2;
      if (segt[2 * id + 1] >= val) {
        id = 2 * id + 1;
        R = mid;
      } else {
        id = 2 * id + 2;
        L = mid + 1;
      }
    }
    return L;
  }
  lzu(id);
  int mid = (L + R) / 2;
  int z = get_res(2 * id + 1, L, mid, l, r, val);
  if (z == -1) {
    return get_res(2 * id + 2, mid + 1, R, l, r, val);
  } else {
    return z;
  }
}
int main() {
  ios_base ::sync_with_stdio(false);
  cin.tie(0);
  int n, m;
  cin >> n >> m;
  fill(a, a + MAXN, INF);
  for (int i = 0; i < m; i++) {
    int l, r;
    cin >> l >> r;
    if (l != r) {
      w[l].push_back(make_pair(0, r));
    }
  }
  fill(segt, segt + 4 * MAXN, n);
  fill(lazy, lazy + 4 * MAXN, INF);
  int q;
  cin >> q;
  for (int i = 1; i <= q; i++) {
    int x, y;
    cin >> x >> y;
    w[x].push_back(make_pair(i, y));
  }
  for (int i = n; i >= 1; i--) {
    for (int j = 0; j < w[i].size(); j++) {
      if (w[i][j].first == 0) {
        update(1, 1, n, i, w[i][j].second - 1, w[i][j].second - 1);
      } else {
        ans[w[i][j].first] =
            get_res(1, 1, n, i, w[i][j].second, w[i][j].second);
      }
    }
  }
  for (int i = 1; i <= q; i++) {
    cout << ans[i] << endl;
  }
}
