# include <bits/stdc++.h>
# define MAX (100000+10)
//# define DB
# define pt puts("")
using namespace std;
struct node{
int a, b;
node(int x, int y):a(x),b(y){}
node(){}
friend bool operator <(const node x, const node y){
return x.a < y.a;
}
friend bool operator <=(const node x, const node y){
return x.a <= y.a;
}
friend bool operator >(const node x, const node y){
return x.a > y.a;
}
};
vector<node> ve;
map<int, int> mp;
vector<int> xita;
int preSum[MAX];
int main(){
ios::sync_with_stdio(false);
int n;
cin>>n;
node now;
for(int i=0;i<n;++i){
cin>>now.a>>now.b;
ve.push_back(now);
if(!mp.count(now.a)){
mp[now.a] = 1;
xita.push_back(now.a);
}
}
sort(xita.begin(), xita.end() );
sort(ve.begin(), ve.end() );
preSum[0] = ve[0].b;
for(int i=1; i<n; ++i){
preSum[i] = preSum[i-1] + ve[i].b;
}
int len = xita.size();
int j=0;
int max=-1, rec;
#ifdef DB
for(int i=0; i<ve.size(); ++i){
cout << "ve[i].a=" << ve[i].a <<" ve[i].b=" << ve[i].b <<endl;
}
for(int i=0; i<xita.size(); ++i){
cout << xita[i] << " ";
}
pt;
#endif
for(int i=0; i<len; ++i){// get temp xita, xita[i]
while(ve[j].a < xita[i] && j < n-1) j++;
// cout << "j=" << j << endl;
int zero = 0, one = preSum[n-1];
if(j > 0){
zero = (j - preSum[j - 1]);
one = preSum[n-1] - preSum[j-1];
}
int ans = one + zero;
// cout << "zero="<<zero<<" one="<<one<<" ans="<<ans<<endl;
if(ans > max){
max = ans;
rec = xita[i];
}else if(ans == max){
if(xita[i] > rec) rec = xita[i];
}
// cout << "ans = " << ans << endl;
}
cout << rec << endl;
return 0;
}