/*
  
  Author: Arnab Sinha
	
  ███████╗██╗  ██╗███████╗██████╗         ██╗      ██████╗  ██████╗██╗  ██╗███████╗██████╗  █████╗  █████╗ 
  ██╔════╝██║  ██║██╔════╝██╔══██╗        ██║     ██╔═══██╗██╔════╝██║ ██╔╝██╔════╝██╔══██╗██╔══██╗██╔══██╗
  ███████╗███████║█████╗  ██████╔╝        ██║     ██║   ██║██║     █████╔╝ █████╗  ██║  ██║╚██████║╚██████║
  ╚════ █║██╔══██║██╔══╝  ██╔══██╗        ██║     ██║   ██║██║     ██╔═██╗ ██╔══╝  ██║  ██║ ╚═══██║ ╚═══██║
  ███████║██║  ██║███████╗██║  ██║███████╗███████╗╚██████╔╝╚██████╗██║  ██╗███████╗██████╔╝ █████╔╝ █████╔╝
  ╚══════╝╚═╝  ╚═╝╚══════╝╚═╝  ╚═╝╚══════╝╚══════╝ ╚═════╝  ╚═════╝╚═╝  ╚═╝╚══════╝╚═════╝  ╚════╝  ╚════╝                                                                                                        
*/
 
#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define li long long int
#define ld long double
#define all(v) v.begin(),v.end()
#define rev(a) reverse(all(a))
#define sort(a) sort(all(a))
#define pb push_back
#define INF 1e18+10
#define MINF -1e18-10
#define rep(i,a,b) for(li i=a;i<b;i++)
#define vli vector<li>
const li MAXN = 1e5+10;
const li mod = 998244353;
using namespace std;
 
li power(li a, li b, li mod) { a%=mod; li ret = 1; while(b){ if(b&1) ret*=a; a*=a;; if(ret>=mod) ret%=mod; if(a>=mod) a%=mod; b>>=1; } return ret; }
 
template <class T> void read(T& x){
	cin>>x;
}
 
template <class T, class... U> void read(T& x, U&... u){
	read(x);
	read(u...);
}
 
template <class A> void read(vector<A>& v){
	for(auto &it:v)
		read(it);
}
 
template <class A> void print(A x){
	cout<<x;
}
 
template <class A> void printl(A x){
	cout<<x<<endl;
}
 
template <class A> void print(vector<A>& v)
{
	for(auto &it:v){
		print(it);
		cout<<' ';
	}
	cout<<endl;
}

bool isprime(li n)
{
    if (n <= 1)
        return false;
    for (li i = 2; i <= sqrt(n); i++)
        if (n % i == 0)
            return false;
    return true;
}

li lcm(li a,li b){
	return (a*b)/__gcd(a,b);
}

void solve()
{
	li n;
	cin>>n;

	vli a(n),b(n);

	rep(i,0,n){
		li x,y;
		cin>>x>>y;
		a[i] = x;
		b[i] = y;
	}

	li ans = INF;
	
	rep(i,0,n){
		rep(j,0,n){
			if(i==j){
				ans = min(ans, a[i] + b[j]);
			}
			else
				ans = min(ans, max(a[i],b[j]));
		}
	}

	cout<<ans<<endl;
}

int main()
{
	IOS;

	// li t;
	// cin>>t;
	// while(t--)
		solve();

	return 0;
}
#include <iostream>
#include <vector>
#include <algorithm>

int main(){
	int N;
	std::cin >> N;
	std::vector<int> A(N), B(N);
	for(int i=0; i<N; ++i){
		std::cin >> A.at(i) >> B.at(i);
	}
	int A_min=A.at(0), A_i=0, B_min=B.at(0), B_i=0;
	for(int i=0; i<N; ++i){
		if(A_min>A.at(i)){
			A_min = A.at(i); A_i = i;
		}
		if(B_min>B.at(i)){
			B_min = B.at(i); B_i = i;
		}
	}
	A.erase(A.begin()+A_i); B.erase(B.begin()+B_i);
	
	int A_min2=A.at(0), B_min2=B.at(0);
	for(int i=0; i<N-1; ++i){
		if(A_min2>A.at(i)) A_min2 = A.at(i);
		if(B_min2>B.at(i)) B_min2 = B.at(i);
	}

	int result;
	if(A_i == B_i) result = std::min(A_min+B_min, std::min(std::max(A_min,B_min2), std::max(A_min2,B_min)));
	else result = std::max(A_min,B_min);
	
	std::cout << result << std::endl;
}
