#include <bits/stdc++.h>
using namespace std;
const long long MAX = 2e9, N = 1e6 + 10, MOD = 998244353, BASE = 1 << 18;
long long n;
pair<long long, long long> wej[N];
unordered_map<long long, long long> mapa;
long long rev[2 * N];
vector<long long> G[2 * N];
bool vis[2 * N];
long long kraw, wierz;
long long maxi, maxi2;
vector<long long> id;
void maxuj(long long x) {
  if (x >= maxi) {
    maxi2 = maxi;
    maxi = x;
    return;
  }
  if (x > maxi2) maxi2 = x;
}
void dfs(long long x) {
  vis[x] = true;
  maxuj(id[x]);
  wierz++;
  kraw += (long long)((G[x]).size());
  for (long long i : G[x])
    if (!vis[i]) dfs(i);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cerr.tie(0);
  cin >> n;
  for (long long i = ((0)); i <= ((n)-1); i++) {
    cin >> wej[i].first >> wej[i].second;
    id.push_back(wej[i].first);
    id.push_back(wej[i].second);
  }
  sort((id).begin(), (id).end());
  id.resize(unique((id).begin(), (id).end()) - id.begin());
  for (long long i = ((0)); i <= ((n)-1); i++) {
    long long a =
        lower_bound((id).begin(), (id).end(), wej[i].first) - id.begin();
    long long b =
        lower_bound((id).begin(), (id).end(), wej[i].second) - id.begin();
    G[a].push_back(b);
    G[b].push_back(a);
  }
  long long res = 0;
  for (long long i = ((0)); i <= (((long long)((id).size())) - 1); i++) {
    if (!vis[i]) {
      kraw = 0, wierz = 0;
      maxi = maxi2 = 0;
      dfs(i);
      kraw /= 2;
      if (kraw > wierz) {
        cout << "-1\n";
        return 0;
      }
      if (kraw == wierz - 1)
        res = max(res, maxi2);
      else
        res = max(res, maxi);
    }
  }
  cout << res;
}
