#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vi = vector<int>;
using vvi = vector<vi>;
using pii = pair<int, int>;
constexpr auto MOD = 1000000007LL;
constexpr auto LINF = (1LL << 60);
constexpr auto INF = 2147483647LL;
constexpr auto PI = 3.1415926535897932384626433;
constexpr auto EPS = 1E-9;
template <typename T1, typename T2>
ostream &operator<<(ostream &out, const pair<T1, T2> p) {
  out << p.first << ' ' << p.second;
  return out;
}
template <typename T1, typename T2>
istream &operator>>(istream &in, pair<T1, T2> &p) {
  in >> p.first >> p.second;
  return in;
}
template <typename T>
istream &operator>>(istream &in, vector<T> &v) {
  for (auto &x : v) in >> x;
  return in;
}
template <typename T>
ostream &operator<<(ostream &out, vector<T> v) {
  for (int i = 0; i < v.size(); i++)
    out << v[i] << (i + 1 == v.size() ? '\n' : ' ');
  out.flush();
  return out;
}
int n;
pii a[1000010 << 1];
int cc[1000010 * 3], sz[1000010 * 3], cnt;
int getcc(int x) {
  if (x == cc[x]) return x;
  return cc[x] = getcc(cc[x]);
}
void merge(int x, int y) {
  x = getcc(x), y = getcc(y);
  if (x == y) return;
  cc[y] = x;
  if (sz[y] > 0) cnt--;
  if (sz[x] + sz[y] <= 0 && sz[x] > 0) cnt--;
  if (sz[x] + sz[y] > 0 && sz[x] <= 0) cnt++;
  sz[x] += sz[y];
  return;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n;
  for (int i = 0, j = 0; i < n; i++) {
    a[j].first = a[j + 1].first = i;
    cin >> a[j].second >> a[j + 1].second;
    j += 2;
  }
  sort(a, a + (n << 1), [](pii x, pii y) { return x.second < y.second; });
  iota(cc, cc + 1000010 * 3, 0);
  fill(sz, sz + n, 1);
  cnt = n;
  for (int id = n, i = 0, j = 0; i < 2 * n; i = j, id++) {
    sz[id] = -1;
    for (; j < 2 * n && a[i].second == a[j].second; j++) {
      merge(a[j].first, id);
    }
    if (cnt == 0) {
      cout << a[i].second << endl;
      return 0;
    }
  }
  cout << -1 << endl;
  return 0;
}
