#include <bits/stdc++.h>
using namespace std;
using ll = long long int;
using dd = double;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
ll INFLL = (ll)2e18, MOD = 1e9 + 7;
const int INF = 0x6f6f6f6f;
vector<vector<ll>> adj;
vector<int> vis;
int dx8[] = {0, 1, 1, 1, 0, -1, -1, -1}, dy8[] = {1, 1, 0, -1, -1, -1, 0, 1},
    dx4[] = {0, 1, 0, -1}, dy4[] = {1, 0, -1, 0};
inline ll mexp(ll x, ll n, ll m) {
  ll res = 1;
  while (n) {
    if (n & 1) res = (res * x) % m;
    n >>= 1;
    x = ((x % m) * (x % m)) % m;
  }
  return res;
}
inline bool ispow2(ll x) { return x && (!(x & (x - 1))); }
inline ll gcd(ll x, ll y) {
  pll p{x, y};
  while (p.second) p = {p.second, p.first % p.second};
  return p.first;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cout << fixed;
  cerr << fixed;
  cout << setprecision(10);
  cerr << setprecision(3);
  mt19937 genr(chrono::high_resolution_clock::now().time_since_epoch().count());
  set<int> div;
  int a, b;
  cin >> a >> b;
  if (a > b) swap(a, b);
  for (int d = 1; d * d <= a; ++d) {
    if (a % d == 0 && b % d == 0) div.insert(d);
    int other = a / d;
    if (a % other == 0 && b % other == 0) div.insert(other);
  }
  for (auto& e : div) cerr << e << ' ';
  cout << '\n';
  int n;
  cin >> n;
  for (int i = 0; i < n; ++i) {
    int l, r;
    cin >> l >> r;
    auto it = div.upper_bound(r);
    --it;
    if (*it >= l)
      cout << *it << '\n';
    else
      cout << -1 << '\n';
  }
  return 0;
}
