#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair <int , int> pii;
typedef long double ld;

const int N = 2e5+10 , mod = 1e9+7;

int n , k , a[N] , flag[4 * N];
ll seg[4 * N];

void relax(int ind , int s , int mid , int e){
   int x = flag[ind];
   flag[ind] = 0;
   flag[2 * ind] += x;
   flag[2 * ind + 1] += x;
   seg[2 * ind] += 1ll * (mid - s) * x;
   seg[2 * ind + 1] += 1ll * (e - mid) * x;
}

void add(int s , int e , int ind , int l , int r , int val){
   if(s >= r || e <= l){
      return;
   }
   if(s >= l && e <= r){
      seg[ind] += 1ll * (e - s) * val;
      flag[ind] += val;
      return;
   }
   int mid = (s + e) / 2;
   relax(ind , s , mid , e);
   add(s , mid , 2 * ind , l , r , val);
   add(mid , e , 2 * ind + 1 , l , r , val);
   seg[ind] = seg[2 * ind] + seg[2 * ind + 1];
}

int get_first(int s , int e , int ind , int need){
   if(seg[ind] < need){
      return mod;
   }
   if(e - s == 1){
      return s;
   }
   int mid = (s + e) / 2;
   relax(ind , s , mid , e);
   if(seg[2 * ind] >= need){
      return get_first(s , mid , 2 * ind , need);
   }
   else{
      return get_first(mid , e , 2 * ind + 1 , need - seg[2 * ind]);
   }
}

int32_t main(){
   ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
   cin >> n >> k;
   for(int i = 0 ; i < n ; i++){
      cin >> a[i];
   }
   sort(a , a + n);
   int ans = mod;
   add(0 , N , 1 , 0 , 1 , 1);
   for(int i = n - 1 ; i >= 0 ; i--){
      int id = get_first(0 , N , 1 , 1);
      add(0 , N , 1 , id + 2 , id + a[i] / 2 + 2 , 2);
      add(0 , N , 1 , id , id + 1 , -1);
      if(a[i] % 2 == 0){
         add(0 , N , 1 , id + a[i] / 2 + 1 , id + a[i] / 2 + 2 , -1);
      }
      ans = min(ans , get_first(0 , N , 1 , k));
   }
   if(ans == mod){
      ans = -1;
   }
   cout << ans;
   return 0;
}
