#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; #define FOR(i,a,b) for(ll i=(a);i<(b);++i) #define ALL(v) (v).begin(), (v).end() #define p(s) cout<<(s)< void vprint(T &V){ for(auto v : V){ cout << v << " "; } cout << endl; } ll B, N; vector A; // 何回操作が必要か ll how_many(ll target){ ll stock = B; ll scarcity = 0; for(ll a : A){ if(a>target){ ll diff = a - target; stock += diff; } else if(a=scarcity){ // 集めた分 ll collect = stock - B; // 埋める分 // scarcity return collect + scarcity; }else{ // 達成不可能 return inf; } } int main(){ cin.tie(0); ios::sync_with_stdio(false); // input cin >> B >> N; A.resize(N); FOR(i, 0, N){ cin >> A.at(i); } sort(ALL(A)); ll left = 0; ll right = *max_element(ALL(A)); while(right-left>3){ ll p0 = (2 * left + 1 * right) / 3; ll p1 = (1 * left + 2 * right) / 3; ll n0 = how_many(p0); ll n1 = how_many(p1); if(n0==inf){ right = p0; } else if(n1==inf){ right = p1; } else if(n0