#include<iostream>
#include<math.h>
#include<vector>
using namespace std;
int trees[1000005] = { 0 };
int n, m;
inline int add(int a, int b) {
if (a - b < 0) a = 0;
else a = a - b;
return a;
}
inline int max(int a, int b) {
if (a < b) return b;
else return a;
}
bool valid(int x) {
int sum = 0;
for (int i = 0;i < n;i++) {
sum += add(trees[i], x);
}
return sum >= m;
}
int main() {
cin >> n >> m;
int maxn = trees[0];
for (int i = 0;i < n;i++) {
cin >> trees[i];
maxn = max(trees[i], maxn);
}
int l = 0;
while (l < maxn) {
int mid = (l + maxn) >> 1;
if (valid(mid) == true) l = mid+1;
else maxn = mid;
}
cout << l-1;
puts("");
return 0;
}