#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
long long n, ff[150010], bb[150010];
vector<long long> dd[5];
void INIT_listd(long long x, long long pos) {
  for (long long i = 1; i * i <= x; i++) {
    if (x % i == 0) {
      dd[pos].push_back(i);
      long long p = x / i;
      if (p != i) dd[pos].push_back(p);
    }
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%d%d", &ff[i], &bb[i]);
  if (n == 1) {
    cout << ff[0] << endl;
    return 0;
  }
  INIT_listd(ff[0], 0);
  INIT_listd(bb[0], 1);
  INIT_listd(ff[1], 2);
  INIT_listd(bb[1], 3);
  for (int i = 0; i < 4; i++) sort(dd[i].begin(), dd[i].end());
  vector<long long> dd2;
  for (int i = 0; i < 2; i++) {
    for (long long k = 2; k <= 3; k++) {
      for (int j = 0; j < dd[i].size(); j++) {
        long long p = upper_bound(dd[k].begin(), dd[k].end(), dd[i][j]) -
                      lower_bound(dd[k].begin(), dd[k].end(), dd[i][j]);
        if (p > 0) dd2.push_back(dd[i][j]);
      }
    }
  }
  sort(dd2.begin(), dd2.end());
  vector<long long> tmp = dd2;
  dd2.clear();
  long long pp = tmp.size();
  for (int i = 0; i < pp - 1; i++)
    if (tmp[i] != tmp[i + 1]) dd2.push_back(tmp[i]);
  if (pp > 0) dd2.push_back(tmp[pp - 1]);
  bool chk[150010];
  tmp.clear();
  if (dd2.size() > 0) tmp.push_back(dd2[0]);
  for (int i = 1; i < dd2.size(); i++) {
    bool can = true;
    for (int j = 0; j < i; j++) {
      if (dd2[i] % dd2[j] == 0 && dd2[j] != 1) {
        can = false;
        break;
      }
    }
    if (can) tmp.push_back(dd2[i]);
  }
  dd2 = tmp;
  long long dsz2 = dd2.size();
  for (long long i = 2; i < n; i++) {
    for (int j = 0; j < dsz2; j++) {
      if (chk[j]) continue;
      if (ff[i] % dd2[j] != 0 && bb[i] % dd2[j] != 0) chk[j] = true;
    }
  }
  for (int i = 0; i < dd2.size(); i++) {
    if (!chk[i] && (dd2[i] != 1)) {
      cout << dd2[i] << endl;
      return 0;
    }
  }
  cout << -1 << endl;
  return 0;
}
