#include <bits/stdc++.h>
using namespace std;
int n, m, f[2000010], c[2000010], val[2000010];
map<int, int> mp;
vector<int> arr[2000010];
int idx(int x) {
  if (mp[x])
    return mp[x];
  else {
    val[++m] = x;
    mp[x] = m;
    return m;
  }
}
int find(int u) { return (f[u] == u ? u : (f[u] = find(f[u]))); }
int main() {
  scanf("%d", &n);
  int i, x, y, a, b, fa, fb;
  for (i = 1; i <= n * 2; i++) f[i] = i;
  memset(c, 0, sizeof(c));
  for (m = 0, i = 1; i <= n; i++) {
    scanf("%d%d", &x, &y);
    a = idx(x);
    b = idx(y);
    fa = find(a);
    fb = find(b);
    if (fa == fb)
      c[fa]++;
    else {
      c[fa] += c[fb];
      f[fb] = fa;
    }
    if (c[fa] > 1) break;
  }
  if (i <= n) {
    puts("-1");
    return 0;
  }
  for (i = 1; i <= m; i++) arr[find(i)].push_back(val[i]);
  int ans = 0;
  for (i = 1; i <= m; i++)
    if (find(i) == i) {
      sort(arr[i].begin(), arr[i].end(), [](int x, int y) { return x > y; });
      if (c[i])
        ans = max(ans, arr[i][0]);
      else
        ans = max(ans, arr[i][1]);
    }
  printf("%d\n", ans);
  return 0;
}
