#include <bits/stdc++.h>
#pragma GCC optimize("O2")
using namespace std;
const int N = 1e6 + 10;
const long long mod = 1e9 + 7;
const long long mod2 = 998244353;
const long long inf = 8e18;
const int LOG = 22;
const int SQ = 320;
long long pw(long long a, long long b, long long M) {
  return (!b ? 1
             : (b & 1 ? (a * pw(a * a % M, b / 2, M)) % M
                      : pw(a * a % M, b / 2, M)));
}
int n, m, q, par[N], sz[N], R[N], mx[N], Ans[N];
vector<int> L[N];
vector<pair<int, int> > Q[N];
int Get(int x) { return (x == par[x]) ? x : par[x] = Get(par[x]); }
void unify(int v, int u) {
  v = Get(v), u = Get(u);
  if (v == u) return;
  if (sz[u] > sz[v]) swap(u, v);
  sz[v] += sz[u];
  par[u] = v;
  mx[v] = max(mx[v], mx[u]);
}
void solve(int T) {
  int tr = min(n, T * SQ);
  for (int i = 1; i <= n; i++) par[i] = i, sz[i] = 1, mx[i] = i;
  for (int i = tr; i >= 1; i--) {
    for (auto x : L[i]) {
      if (x > tr) continue;
      int now = mx[Get(i)];
      while (now < x) {
        unify(now, now + 1);
        now = mx[Get(now + 1)];
      }
    }
    for (auto x : Q[i]) {
      if (!(tr <= x.first && x.first < tr + SQ)) {
        continue;
      }
      int cur = mx[Get(i)];
      for (int j = tr + 1; j <= x.first; j++) {
        if (R[j] < i) continue;
        if (cur >= R[j]) cur = max({mx[Get(tr)], cur, j});
      }
      Ans[x.second] = cur;
    }
  }
}
int main() {
  memset(R, -1, sizeof R);
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; i++) {
    int l, r;
    scanf("%d%d", &l, &r);
    L[l].push_back(r);
    R[r] = l;
  }
  scanf("%d", &q);
  for (int i = 1; i <= q; i++) {
    int l, r;
    scanf("%d%d", &l, &r);
    int T1 = l / SQ, T2 = r / SQ;
    if (T1 == T2) {
      int ind = r;
      for (int j = r; j >= l; j--) {
        par[j] = j, sz[j] = 1, mx[j] = j;
      }
      for (int j = r; j >= l; j--) {
        ind = min(ind, j);
        if (R[j] < l) continue;
        while (ind >= R[j]) unify(ind, j), ind--;
      }
      Ans[i] = mx[Get(l)];
    } else
      Q[l].push_back(make_pair(r, i));
  }
  for (int i = 1; i <= n / SQ; i++) {
    solve(i);
  }
  for (int i = 1; i <= q; i++) {
    printf("%d\n", Ans[i]);
  }
  return 0;
}
