using namespace std;
typedef unsigned long long ull;
typedef long long ll;
typedef pair<int,int>pii;
const int maxn=1e5+34,MAXN=8e4;
ll idx,cnt,a[maxn],b[maxn],pre[maxn],back[maxn];
ll MOD=1e9+7;
deque<ll>que[3];
vector<ll>G[2];
int main()
{
ll n,k,minus;
scanf("%lld%lld",&n,&k);
for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
sort(a+1,a+1+n);
for(int i=1;i<=n;i++){
int l=i,r=i+1;
while(a[l]==a[r])r++;
i=r-1;
que[0].push_back(r-l);
que[1].push_back(a[l]);
que[2].push_back(a[l]);
}
// for(int i=1;i<=n;i++)cout<<a[i]<<' ';
// cout<<endl;
for(int i=1;i<=2*que[0].size()+3;i++){
que[2].push_back(que[2].front());
que[2].pop_front();
pre[que[2].front()]=que[2].back();
back[que[2].back()]=que[2].front();
}
while(k>0&&que[0].size()>1){
if(k<que[0].front()*(back[que[1].front()]-que[1].front())&&k<que[0].back()*(que[1].back()-pre[que[1].back()]))break;
if(que[0].front()*(back[que[1].front()]-que[1].front())<=que[0].back()*(que[1].back()-pre[que[1].back()])){
k-=que[0].front()*(back[que[1].front()]-que[1].front());
ll t=que[0].front();que[0].pop_front();
t+=que[0].front();que[0].pop_front();
que[0].push_front(t);
que[1].pop_front();
}
else{
k-=que[0].back()*(que[1].back()-pre[que[1].back()]);
ll t=que[0].back();que[0].pop_back();
t+=que[0].back();que[0].pop_back();
que[0].push_back(t);
que[1].pop_back();
}
}
// while(que[0].size()){
// cout<<que[0].front()<<' '<<que[1].front()<<endl;
// que[0].pop_front();que[1].pop_front();
// }
if(k>0&&que[0].size()>1){
minus=k/min(que[0].front(),que[0].back());
}
if(k>0&&que[0].size()>1)minus+=k/min(que[0].front(),que[0].back());
printf("%lld\n",max(que[1].back()-que[1].front()-minus,cnt));
return 0;
}