#include<bits/stdc++.h>
#define fir first
#define sec second
using namespace std;
using ll = long long;
const int maxn = 2e3 + 5;
const int maxm = 3e5 + 5;
const ll oo = 1e18 + 1;
ll e[maxn], s[maxm], Ps1[maxn], Len[maxn];
int n, m;
bool ISub1 = true, DSub1 = true;
int BSI1(ll x, int limit) {
int l = 1, r = limit;
while (l <= r) {
int mid = (l + r) / 2;
if (Ps1[limit] - Ps1[mid - 1] + x < 0)
l = mid + 1;
else r = mid - 1;
}
return (l);
}
int BSD1(ll x, int limit) {
int l = limit, r = n;
while (l <= r) {
int mid = (l + r) / 2;
if (Ps1[limit] - Ps1[mid + 1] + x < 0)
r = mid - 1;
else l = mid + 1;
}
return (l - 1);
}
void Sub1() {
if (ISub1) {
int limit = n;
Ps1[0] = 0;
for (int i = 1; i <= n; i++)
if (e[i] < 0) {
Ps1[i] = Ps1[i - 1] + e[i];
}
else {
limit = i - 1;
break;
}
for (int i = 1; i <= m; i++) {
int id = BSI1(s[i], limit);
cout << n - id + 1 << ' ';
}
return;
}
else {
int limit = 1;
ll add = 0;
Ps1[n + 1] = 0;
for (int i = 1; i <= n; i++)
if (e[i] > 0) add += e[i];
else break;
for (int i = n; i; i--)
if (e[i] < 0) {
Ps1[i] = Ps1[i + 1] + e[i];
}
else {
limit = i + 1;
break;
}
for (int i = 1; i <= m; i++) {
int id = BSD1(s[i] + add, limit);
cout << id << ' ';
}
return;
}
}
void Sub3() {
int curmask = (1 << n);
for (int i = 0; i <= n; i++) Len[i] = -oo;
for (int mask = 0; mask < curmask; mask++) {
int len = __builtin_popcount(mask);
ll sum = 0, ans = oo;
for (int id = 0; id < n; id++)
if ((mask >> id) & 1) {
sum += e[id + 1];
ans = min(ans, sum);
}
Len[len] = max(Len[len], ans);
}
for (int i = 1; i <= m; i++)
for (int len = n; len >= 0; len--)
if (s[i] + Len[len] >= 0) {
cout << len << ' ';
break;
}
}
void Sub4() {
for (int i = 1; i <= m; i++) {
ll sum = s[i];
priority_queue<ll, vector<ll>, greater<ll>> inQue;
for (int j = 1; j <= n; j++)
if (sum + e[j] >= 0) {
inQue.push(e[j]);
sum += e[j];
}
else if (!inQue.empty() && inQue.top() < e[j]) {
ll x = inQue.top();
inQue.pop();
sum -= x;
sum += e[j];
inQue.push(e[j]);
}
cout << inQue.size() << ' ';
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> e[i];
if (i >= 2)
if (e[i] < e[i - 1])
ISub1 = false;
else if (e[i] > e[i - 1])
DSub1 = false;
}
for (int i = 1; i <= m; i++) cin >> s[i];
if (ISub1 || DSub1) {
Sub1();
return 0;
}
if (n <= 21) {
Sub3();
return 0;
}
if (m <= 5005) {
Sub4();
return 0;
}
return 0;
}