#include <bits/stdc++.h>
#define int long long
#define fast ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
#define lg2(n) (63-__builtin_clzll(n))
#define mask(n) (1 << (n))
#define TASK "TASK"
#define openfile();  if( fopen(TASK".inp", "r")){freopen(TASK".inp", "r", stdin);freopen(TASK".out", "w", stdout);}

#define fi first
#define se second
#define FOR(i, l, r, k) for( int i = l; i <= r; i += k)
#define FOD(i, r, l, k) for( int i = r; i >= l; i -= k)

#define mii map<int,int>
#define umi unordered_map<int, int>
#define pii pair<int,int>
#define vi vector<int>

using namespace std;

const int oo = 1e18;
const int mod = 1e9 + 7;
const int nmax = 1e6 + 8;
const int base = 31;

int n, res, a[nmax], pf[nmax], k;

int calc(int l, int r){
    if(l > r) return 0;
    return pf[r] - pf[l - 1];
}

bool check(int val){
    int s = 0;
    if(pf[n] - val <= k) {
//        cout << pf[n] << ' ' << val << endl;
        return true;
    }
    for(int i = n; i >= n - val + 1; --i){
        int j = n - i + 1;
        int tmp = val - j;
        int cur = max(0LL, a[1] - tmp);
        if(cur * (j + 1) + calc(2, i - 1) <= k){
//            cout << j << ' ' << val << ' ' << cur * (j + 1) + calc(2, i - 1) << endl;
            return 1;
        }
    }
    return false;
}

main(){
    fast;
    openfile();
    cin >> n >> k;
    for(int i = 1; i <= n; ++i) {
        cin >> a[i];
    }
    sort(a + 1,a + n + 1);
    for(int i = 1; i <= n; ++i) {
        pf[i] = pf[i - 1] + a[i];
    }
    int l = 0, r = a[1] + n;
    while(l <= r){
        int mid = (l + r) >> 1;
        if(check(mid)){
            r = mid - 1;
        }
        else l = mid + 1;
    }
    cout << l;
}
