#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-8;
int sgn(double x) { return x < -eps ? -1 : x > eps; }
int Mn(int& a, int b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
int Mx(int& a, int b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
long long gcd(long long a, long long b) { return a == 0 ? b : gcd(b % a, a); }
long long inv(long long a, long long b) {
  return a == 1 ? 1 : (1 - b * inv(b % a, a)) / a;
}
long long exg(long long a, long long b, int& x, int& y) {
  !a ? x = 0, y = 1 : (exg(b % a, a, y, x), x -= b / a * y);
}
long long pow(long long a, long long b, long long M) {
  long long t = 1;
  for (a %= M; b; b >>= 1) {
    if (b & 1) t = t * a % M;
    a = a * a % M;
  }
  return t;
}
const int N = 1e5 + 5, B = 330;
vector<int> a[N];
int f[N][B], g[N][B], n, m, L, pre[N];
stack<int> q;
int solve(int x, int cur, int st, int y) {
  for (int i = st; i <= int(y); i++)
    if (x <= pre[i] && pre[i] <= cur) cur = i;
  return cur + 1;
}
int main() {
  cin >> n >> m;
  for (int i = 0; i <= int(n - 1); i++) pre[i] = -1;
  for (int i = 1; i <= int(m); i++) {
    int x, y;
    scanf("%d", &x);
    scanf("%d", &y);
    x--;
    y--;
    a[x].push_back(y);
    pre[y] = x;
  }
  L = sqrt(n) + 0.5;
  for (int i = 0; i <= int(n - 1); i++) sort(a[i].begin(), a[i].end());
  for (int i = 0; i <= int(n - 1); i++) {
    if (!((int)(a[i]).size())) continue;
    int k = 0;
    for (int j = 1; j <= int((n - 1) / L); j++) {
      while (k < ((int)(a[i]).size()) - 1 && a[i][k + 1] <= j * L) k++;
      if (a[i][k] <= j * L) g[i][j] = a[i][k];
    }
  }
  for (int j = 1; j <= int((n - 1) / L); j++) {
    while (!q.empty()) q.pop();
    for (int i = n - 1; i >= int(0); i--) {
      f[i][j] = max(i, g[i][j]);
      while (!q.empty() && q.top() <= f[i][j])
        Mx(f[i][j], f[q.top()][j]), q.pop();
      q.push(i);
    }
  }
  int T;
  cin >> T;
  while (T--) {
    int x, y;
    scanf("%d", &x);
    scanf("%d", &y);
    x--;
    y--;
    printf("%d\n", solve(x, max(x, f[x][y / L]), max(x, y / L * L), y));
  }
}
