#include <bits/stdc++.h>
using namespace std;
 
typedef long long ll;
typedef vector<int> vi;
typedef vector<pair<int, int>> vii;
typedef pair<int, int> pi;
#define MOD 1000000007LL

int n, k; int n2;
vector<int> chains;
int stree[1600000]={};

void add(int i, int v) {
    i += n2;
    for (; i >= 1; i /= 2) stree[i] += v;
}

int sum(int a, int b) {
    a += n2; b += n2;
    int s = 0;
    while (a <= b) {
        if (a%2 == 1) s += stree[a++];
        if (b%2 == 0) s += stree[b--];
        a /= 2; b /= 2;
    }
    return s;
}

int main() {
    //freopen("feast.in", "r", stdin);
    //freopen("feast.out", "w", stdout);
    //ios_base::sync_with_stdio(false);
    //cin.tie(0);
    
    cin >> n >> k;
    n2 = 1; while (n2 <= 4e5) n2 *= 2;
    chains.resize(n);
    for (int i = 0; i < n; i++) cin >> chains[i];
    sort(chains.begin(), chains.end(), greater<int>());
    int ai = 4e5, cnt = 1, ans = 1e9;
    
    add(0, 1); add(1, -1);
    //cout << "debugging: ";
    //for (int i = 0; i <= 10; i++) cout << sum(0, i) << " "; cout << endl;
    
    int idx = 0;
    for (auto l : chains) { l--;
        int fl = l/2, sl = l-fl;
        while (sum(0, idx) == 0) idx++;
        add(idx, -1); add(idx+1, 1);
        add(idx+2, 1); add(idx+2+fl, -1);
        add(idx+2, 1); add(idx+2+sl, -1);
        
        if (ai < idx) cnt += 0;
        else if (ai == idx) cnt -= 1;
        else if (ai == idx+1) cnt -= 1;
        else {
            cnt -= 1;
            cnt += min(ai, idx+1+fl) - (idx+1);
            cnt += min(ai, idx+1+sl) - (idx+1);
        }
        while (cnt - sum(0, ai) >= k) { cnt -= sum(0, ai); ai--; }
        if (cnt >= k) ans = min(ans, ai);
        
        //cout << "Debugging: " << l << " " << fl << " " << sl << " " << idx << endl;
        //for (int i = 0; i <= 10; i++) cout << sum(0, i) << " "; cout << endl;
        //cout << ai << " " << cnt << " " << ans << endl;
    }
    
    cout << (ans==1e9 ? -1 : ans) << endl;
}