#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e5 + 10;
ll n, m, a[N];
// 检查在每个成员最多分到 mid 只猫猫的情况下,是否可以将所有猫猫分完
bool check(ll mid) {
ll sum = 0;
for (int i = 1; i <= m; i++) {
sum += (a[i] + mid - 1) / mid; // 计算每种花色需要的成员数
}
return sum <= n; // 判断是否可以在 n 个成员内分完
}
int main() {
// 读取成员数和猫猫的花色种数
cin >> n >> m;
ll L = 1, R = 0;
// 读取每种花色的猫猫数量,并找到最大值
for (int i = 1; i <= m; i++) {
cin >> a[i];
R = max(R, a[i]);
}
ll ans = R;
// 二分查找确定最小的不满度
while (L <= R) {
ll mid = (L + R) / 2;
if (check(mid)) {
ans = mid; // 更新答案
R = mid - 1; // 尝试更小的最大值
} else {
L = mid + 1; // 尝试更大的最大值
}
}
// 输出最小的不满度
cout << ans;
return 0;
}