#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define mp make_pair #define pb push_back #define all(x) (x).begin(),(x).end() #define YES() printf("YES\n") #define NO() printf("NO\n") using namespace std; #define int long long //typedef long long ll; typedef unsigned long long ull; typedef vector vb; typedef vector vi; typedef vector vvb; typedef vector vvi; typedef pair P; const int INF=1e+9; const double EPS=1e-9; const int MOD=1000000007; const int dx[]={1,0,-1,0},dy[]={0,-1,0,1}; int n,m,a[100000]; bool C(int x){ int pt = a[0] + a[x],low = 1,up = n - 1,cnt = 0; while(up > low){ if(up == x) up--; if(up < 0) break; while(1) { if(low != x && a[up] + a[low] > pt) break; if(up <= low) break; low++; } if(up <= low) break; cnt++; up--; low++; } return cnt < m; } signed main(){ cin >> n >> m; for(int i = 0;i < n;i++) cin >> a[i]; if(n == 2){ cout << a[1] << endl; return 0; } sort(a + 1,a + n); int low = 1,up = n; while(up - low > 1){ int mid = (low + up) / 2; if(C(mid)) up = mid; else low = mid; } if(up >= n) cout << -1 << endl; else cout << a[up] << endl; return 0; }