bool check(vector a , int b, int m){

int sum = 0;

int n = a.size();

for(int i=0;i<n;i++){

if(sum+max(0, a[i]-m)>=b){

return true;

}

else{

sum+=max(0, a[i]-m);

}

}

return false;

}

int Solution::solve(vector &A, int B) {

int mn= INT_MAX;

int mx = 0;

for(int i=0;i<A.size();i++){

mx= max(A[i], mx);

mn= min(A[i], mn);

}

int l = mn;

int r= mx;

int ans = 0;

while(l<=r){

int m= l+(r-l)/2;

if(check(A, B, m)){

ans = max(ans , m);

l=m+1;

}

else{

r=m-1;

}

```
}
return ans;
```

}