#include <bits/stdc++.h>
using namespace std;
const double pi = 3.141592653589;
long long int mod = 1000000007;
long long int mod2 = 1000000009;
const long long int inf = 1e9;
const long long int inff = 9000000000000000000;
long double eps = 1e-9;
const long long int base1 = 304933;
const long long int base2 = 4395853;
long double power(long long int x, long long int y, long long int p) {
  long long int res = 1;
  x = x % p;
  while (y > 0) {
    if (y & 1) res = (res * x) % p;
    y = y >> 1;
    x = (x * x) % p;
  }
  return res;
}
long long int modInverse(long long int n, long long int p) {
  return power(n, p - 2, p);
}
long long int fac[1];
long long int invfac[1];
long long int ncr(long long int n, long long int r, long long int p) {
  if (r > n) return 0;
  if (r == 0) return 1;
  return (fac[n] * modInverse(fac[r], p) % p * modInverse(fac[n - r], p) % p) %
         p;
}
long long int log(long long int a, long long int b) {
  if (a == 1) return b;
  long long int ans = 0;
  while (b) {
    ans++;
    b /= a;
  }
  return ans - 1;
}
int is_prime[1];
int smallestfactor[1];
void sieve() {
  for (long long int i = 2; i <= 5000000; i++) {
    if (is_prime[i]) {
      for (long long int j = i * i; j <= 5000000; j += i) {
        if (is_prime[j] == 1) {
          is_prime[j] = 0;
          smallestfactor[j] = i;
        }
      }
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int test = 1;
  while (test--) {
    long long int n, k;
    cin >> n >> k;
    long long int arr[n];
    for (int i = 0; i < n; i += 1) {
      cin >> arr[i];
    }
    sort(arr, arr + n);
    long long int l = 0, r = n - 1, siz = 0;
    vector<long long int> v1, v2, v3;
    while (l < r) {
      siz++;
      if (l + 1 <= n - r) {
        v1.push_back((arr[l + 1] - arr[l]) * (l + 1));
        v2.push_back(arr[l + 1] - arr[l]);
        v3.push_back(l + 1);
        l++;
        while (l + 1 <= n - 1 && arr[l + 1] == arr[l]) {
          l++;
        }
      } else {
        v1.push_back((arr[r] - arr[r - 1]) * (n - r));
        v2.push_back(arr[r] - arr[r - 1]);
        v3.push_back(n - r);
        r--;
        while (r - 1 >= 0 && arr[r - 1] == arr[r]) {
          r--;
        }
      }
    }
    for (int i = 1; i < siz; i += 1) {
      v1[i] = v1[i] + v1[i - 1];
      v2[i] = v2[i] + v2[i - 1];
    }
    vector<long long int>::iterator it;
    it = upper_bound(v1.begin(), v1.end(), k);
    long long int a = (it - v1.begin());
    if (a == 0) {
      cout << arr[n - 1] - arr[0] - k / v3[0];
    } else if (it == v1.end()) {
      cout << 0;
    } else {
      it--;
      cout << arr[n - 1] - arr[0] - v2[a - 1] - (k - (*it)) / (v3[a]);
    }
  }
  return 0;
}
