#include <bits/stdc++.h>
using i64 = long long;
using u64 = unsigned long long;
using u32 = unsigned;
int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
  int n;
  std::cin >> n;
  std::vector<int> c0(n, 0);
  std::vector<int> c1(n, 0);
  for (int i = 0; i < n; i++) {
    std::cin >> c0[i] >> c1[i];
  }
  std::vector<int> tmp{0};
  for (int i = 0; i < n; i++) {
    tmp.emplace_back(c0[i]);
    tmp.emplace_back(c1[i]);
  }
  std::sort(tmp.begin(), tmp.end());
  tmp.resize(std::unique(tmp.begin(), tmp.end()) - tmp.begin());
  for (int i = 0; i < n; i++) {
    c0[i] = std::lower_bound(tmp.begin(), tmp.end(), c0[i]) - tmp.begin();
    c1[i] = std::lower_bound(tmp.begin(), tmp.end(), c1[i]) - tmp.begin();
  }
  std::vector<int> p(tmp.size(), 0);
  std::iota(p.begin(), p.end(), 0);
  auto find = [&](int x) {
    while (x != p[x]) {
      x = p[x] = p[p[x]];
    }
    return x;
  };
  int ans = 0;
  for (int i = 0; i < n; i++) {
    int x = c0[i];
    int y = c1[i];
    x = find(x);
    y = find(y);
    if (!x && !y) {
      std::cout << -1, exit(0);
    } else {
      if (x == y || !x || !y) {
        ans = std::max({ans, x, y});
        p[x] = p[y] = 0;
      } else {
        ans = std::max(ans, std::min(x, y));
        p[std::min(x, y)] = std::max(x, y);
      }
    }
  }
  std::cout << tmp[ans] << "\n";
  return 0;
}
