#include<iostream>
using namespace std;
const int N=1e6+10;
int n,a[N];
long long m,ans,cnt;
bool check(int x)//
{
cnt=0;
for(int i=1;i<=n;i++)
{
if(x<=a[i])
{
cnt=cnt+(a[i]-x);
}
}
if(cnt>=m)return true;//******至少有m米才行,才返回true
else return false;//不然就向左边区域寻找
}
int main()
{
cin>>n>>m;//输入
int maxh=0;
for(int i=1;i<=n;i++)//输入
{
cin>>a[i];
if(a[i]>maxh)//小剪枝
maxh=a[i];
}
int l=0,r=maxh;
while(l<=r)//二分答案
{
int mid=l+r>>1;
if(check(mid))
{
ans=mid;
l=mid+1;
}
else
{
r=mid-1;
}
}
cout<<ans<<endl;//输出
return 0;//好习惯
}
ook~