// #include<bits/stdc++.h>
// using namespace std;
// #define N 100000

// int getRandom(int l, int r)
// {
// 	return l + rand()%(r-l+1);
// }





// int32_t main()
// {
// 	#ifndef ONLINE_JUDGE 
//     // For getting input from input.txt file 
//     // freopen("input.txt", "r", stdin); 
//     // Printing the Output to output.txt file 
//     freopen("input.txt", "w", stdout); 
// 	#endif 
  
//     srand(time(0));
 	
//  	int t = 10;
//  	cout << t << "\n";
//  	while(t--)
//  	{
//  		int n = getRandom(199, 200);
//  		int m = getRandom(199, 200);
//  		cout << n << "\n";
//  		cout << m << "\n";
//  		for(int i = 0; i < n; i++)
//  		{
//  			for(int j = 0; j < m; j++)
//  			{
//  				cout << 0 << " ";
//  			}
//  		}
//  		cout << "\n~\n";
//  	}
    
 
//     return 0;
// }






// ---------------------------- DIVIDER ---------------------------- //





// #include<bits/stdc++.h>
// using namespace std;



// class Solution {
//   public:
//     bool ValidCorner(const vector<vector<int> >& matrix) {
//         int rows = matrix.size();
//         if (rows == 0)
//             return false;
       
//         int columns = matrix[0].size();
//         unordered_map<int, unordered_set<int> > ump;
//         for (int i = 0; i < rows; ++i)
//         {
//             for (int j = 0; j < columns - 1; ++j)
//             {
//                 for (int k = j + 1; k < columns; ++k)
//                 {
//                     if (matrix[i][j] == 1 && matrix[i][k] == 1)
//                     {
//                         if (ump.find(j) != ump.end() && ump[j].find(k) != ump[j].end())
//                             return true;
//                         if (ump.find(k) != ump.end() && ump[k].find(j) != ump[k].end())
//                             return true;
//                         ump[j].insert(k);
//                         ump[k].insert(j);
//                     }
//                 }
//             }
//         }
//        return false;
//     }
// };



// int32_t main()
// {
// 	#ifndef ONLINE_JUDGE 
//     // For getting input from input.txt file 
//     freopen("input.txt", "r", stdin); 
//     // Printing the Output to output.txt file 
//     freopen("output.txt", "w", stdout); 
// 	#endif 
  
//     ios_base::sync_with_stdio(false);
//     cin.tie(NULL);
//     cout.tie(NULL);
 	
//  	int t;
//  	cin >> t;
//  	while(t--)
//  	{
//  		int row, col;
//         cin>> row>> col;

//         vector<vector<int> > matrix(row);
            
//         for(int i=0; i<row; i++)
//         {
//             matrix[i].assign(col, 0);
//             for( int j=0; j<col; j++)
//             {
//                 cin>>matrix[i][j];
//             }
//         }

//         char ch;
//         cin >> ch;
        
//         Solution ob;
        
//         if (ob.ValidCorner(matrix)) 
//             cout << "Yes"; 
//         else
//             cout << "No"; 
//         cout << "\n~\n"; 
//  	}
    
 
//     return 0;
// }


























#include<bits/stdc++.h>
using namespace std;
#define int long long 
#define mod (int)(1e9+7)
#define endl '\n'
#define MAXI (int)(1e16)
#define N 105


int32_t main()
{
	
  
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
 
    int n;
    cin >> n;
    int a[n][2];
    for(int i = 0; i < n; i++)
    	cin >> a[i][0] >> a[i][1];

    int ans = 9999999999;
    for(int i = 0; i < n; i++)
    {
    	for(int j = 0; j < n; j++)
    	{
    		if(i!=j)
    			ans = min(ans, max(a[i][0], a[j][1]));
    		else
    			ans = min(ans, a[i][0] + a[j][1]);
    	}
    }

    cout << ans;
 
    return 0;
}



#include<bits/stdc++.h>
#define f(i,a,b) for(int i=a;i<b;i++)
#define ll long long
#define pb push_back
#define mp make_pair
#define vp vector<pair<int,int>>
using namespace std;
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
      int n;
      cin>>n;
      
      int a,b;
      vp v1,v2;
      f(i,0,n)
      {
          cin>>a>>b;
          v1.pb(mp(a,i));
          v2.pb(mp(b,i));
      }
      
      sort(v1.begin(),v1.end());
      sort(v2.begin(),v2.end());
      
      int mn=INT_MAX;
      
      f(i,0,n-1)
      f(j,i,i+2)
      if(v1[i].second!=v2[j].second && mn>max(v1[i].first,v2[j].first))
      mn=max(v1[i].first,v2[j].first);
      else if(mn>v1[i].first+v2[j].first)
      mn=v1[i].first+v2[j].first;
      
      
      
      cout<<mn;
	cout<<endl;  
    
    return 0;
}





