#include <bits/stdc++.h>
using namespace std;
int a[1000010], b[1000010];
int mp[2000010];
int idx(int x, int n) { return lower_bound(mp + 1, mp + 1 + n, x) - mp; }
int sec[2000010];
int F[2000010];
int add[2000010];
int f(int x) { return x == F[x] ? x : (F[x] = f(F[x])); }
void unite(int u, int v) {
  if (f(u) == f(v))
    add[f(u)]++;
  else {
    int U = f(u), V = f(v);
    if (U < V) swap(U, V);
    sec[U] = max(sec[U], max(sec[U], V));
    add[U] += add[V];
    F[V] = F[U];
  }
}
int main() {
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    scanf("%d%d", a + i, b + i);
    mp[i] = a[i], mp[i + n] = b[i];
  }
  sort(mp + 1, mp + 1 + n * 2);
  int tot = unique(mp + 1, mp + 1 + n * 2) - mp - 1;
  for (int i = 1; i <= tot; i++) F[i] = i;
  for (int i = 1; i <= n; i++) {
    unite(idx(a[i], tot), idx(b[i], tot));
  }
  int ans = 0;
  bool ok = 1;
  for (int i = 1; i <= tot; i++) {
    if (f(i) == i) {
      if (add[i] > 1)
        ok = 0;
      else if (add[i] == 1)
        ans = max(ans, mp[i]);
      else
        ans = max(ans, mp[sec[i]]);
    }
  }
  if (ok)
    cout << ans << endl;
  else
    cout << -1 << endl;
  return 0;
}
