#include <bits/stdc++.h>
 
#define fi first
#define se second
#define mp make_pair
#define mt make_tuple
#define pb push_back
#define INF  (1<<30)
#define INFL (1LL<<60)
#define EPS ((ld)(1e-9))
 
#define sz(x) ((int)(x).size())
#define setz(x) memset(x, 0, sizeof(x))
#define all(x) (x).begin(), (x).end()
#define rep(i, e) for (int i = 0, _##i = (e); i < _##i; i++)
#define repp(i, s, e) for (int i = (s), _##i = (e); i < _##i; i++)
#define repr(i, s, e) for (int i = (s)-1, _##i = (e); i >= _##i; i--)
#define repi(i, x) for (auto &i : (x))
#define ARR(...) vector<int>({__VA_ARGS__})
#define ARS(...) vector<string>({__VA_ARGS__})
 
 
using namespace std;
 
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef complex<double> base;
typedef pair<int, int> pii;
typedef pair<double, double> pdd;
typedef pair<ll, ll> pll;
 
template<typename T, typename V>
ostream &operator<<(ostream &os, const pair<T, V> pai) { 
    return os << '(' << pai.first << ' ' << pai.second << ')';
}
 
template<typename T>
ostream &operator<<(ostream &os, const vector<T> v) {
    cout << '[';
    for (auto p : v) cout << p << ",";
    cout << "]";
    return os;
}
 
template<typename T, typename V>
ostream &operator<<(ostream &os, const set<T, V> v) {
    cout << "{";
    for (auto p : v) cout << p << ",";
    cout << "}";
    return os;
}
 
template<typename T, typename V>
ostream &operator<<(ostream &os, const map<T, V> v) {
    cout << "{";
    for (auto p : v) cout << p << ",";
    cout << "}";
    return os;
}
 
#ifndef __SOULTCH
#define debug(...) 0
#define endl '\n'
#else
#define debug(...) cout << " [-] ", _dbg(#__VA_ARGS__, __VA_ARGS__)
template<class TH> void _dbg(const char *sdbg, TH h){ cout << sdbg << '=' << h << endl; }
template<class TH, class... TA> void _dbg(const char *sdbg, TH h, TA... a) {
    while(*sdbg != ',') cout << *sdbg++;
    cout << '=' << (h) << ','; 
    _dbg(sdbg+1, a...);
}
#endif
 
template<typename T> void get_max(T &a, T b) {a = max(a, b);}
template<typename T> void get_min(T &a, T b) {a = min(a, b);}

int N;
int A[199999];
vector<int> v;

int main(void) {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    
    cin >> N;
    rep(i, 2*N-1) cin >> A[i], v.push_back(A[i]);

    sort(all(v));
    v.erase(unique(all(v)), v.end());

    int l = 0, r = sz(v)-1;
    while(l < r) {
        int mid = (l+r+1)/2, val = v[mid];
        if (A[N-1] >= val and (A[N-2] >= val or A[N] >= val)) {
            l = mid;
            continue;
        }
        if (A[N-1] < val and (A[N-2] < val or A[N] < val)) {
            r = mid-1;
            continue;
        }

        int a = N-1, b = N-1;
        while(a > 0     and (A[a] >= val) != (A[a-1] >= val)) a--;
        while(b < 2*N-2 and (A[b] >= val) != (A[b+1] >= val)) b++;

        if ((A[a] >= val) == (A[b] >= val)) {
            if (A[a] >= val) {
                l = mid;
            } else {
                r = mid-1;
            }
        } else {
            int da = N-1-a;
            int db = b-N+1;

            if ((da > db and A[b] >= val) or (da < db and A[a] >= val)) {
                l = mid;
            } else {
                r = mid-1;
            }
        }
    }

    cout << v[l] << endl;
}

Measured memory_bytes: 1912