#include #include #include using namespace std; #define MAX 100002 int n; int m; vector v; vector vv; multiset s; bool ok(int val){ s.clear(); for (int i = 0; i < vv.size(); i++){ s.insert(vv[i]); } auto it = s.lower_bound(val); s.erase(it); int rankk = 0; while (!s.empty()){ auto f = *s.rbegin(); s.erase(s.lower_bound(f)); int need = val + v[0] - f; need++; auto it = s.lower_bound(need); if (it != s.end()){ s.erase(it); rankk++; } else{ break; } } rankk++; return rankk <= m; } int main(){ cin >> n >> m; for (int i = 0; i < n; i++){ int a; scanf("%d", &a); v.push_back(a); if (i)vv.push_back(a); } sort(vv.begin(), vv.end()); int mint = 0; int maxt = vv.size() - 1; while (mint + 1 < maxt){ int mid = (mint + maxt) >> 1; if (ok(vv[mid])){ maxt = mid; } else{ mint = mid; } } if (ok(vv[mint])){ cout << vv[mint] << endl; } else{ if (ok(vv[maxt])){ cout << vv[maxt] << endl; } else{ puts("-1"); } } return 0; }