#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:102400000,102400000")
template <class T>
inline T lowbit(T x) {
  return x & (-x);
}
template <class T>
inline T sqr(T x) {
  return x * x;
}
template <class T>
inline bool scan(T &ret) {
  char c;
  int sgn;
  if (c = getchar(), c == EOF) return 0;
  while (c != '-' && (c < '0' || c > '9')) c = getchar();
  sgn = (c == '-') ? -1 : 1;
  ret = (c == '-') ? 0 : (c - '0');
  while (c = getchar(), c >= '0' && c <= '9') ret = ret * 10 + (c - '0');
  ret *= sgn;
  return 1;
}
const double pi = 3.14159265358979323846264338327950288L;
using namespace std;
int n, m;
long long a[755], rMin[200005], lMin[200005], sum[200005];
long long ans[755];
priority_queue<long long, vector<long long>, greater<long long> > gg;
void init() {
  memset(ans, 0, sizeof(ans));
  lMin[0] = rMin[n + 1] = 1e17;
  for (int i = n; i >= 1; i--) rMin[i] = min(rMin[i + 1], sum[i]);
  for (int i = 1; i <= n; i++) lMin[i] = min(lMin[i - 1], sum[i]);
  ans[0] = max(ans[0], -lMin[n]);
  ;
  for (int cnt = 1; cnt <= n; cnt++) {
    long long tmp = -1e17;
    int pos = -1;
    for (int i = 1; i <= n; i++)
      if (a[i] < 0) {
        if (tmp < min(rMin[i] - a[i], lMin[i - 1])) {
          tmp = min(rMin[i] - a[i], lMin[i - 1]);
          pos = i;
        }
      }
    if (pos == -1 || tmp >= 0) break;
    a[pos] = 0;
    ans[cnt] = -tmp;
    sum[0] = 0;
    for (int i = 1; i <= n; i++) sum[i] = sum[i - 1] + a[i];
    for (int i = n; i >= 1; i--) rMin[i] = min(rMin[i + 1], sum[i]);
    for (int i = 1; i <= n; i++) lMin[i] = min(lMin[i - 1], sum[i]);
  }
}
int main() {
  scan(n);
  scan(m);
  sum[0] = 0;
  for (int i = 1; i <= n; i++) {
    scan(a[i]);
    sum[i] = sum[i - 1] + a[i];
  }
  init();
  for (int i = 1; i <= m; i++) {
    long long tmp;
    scan(tmp);
    int l = 0, r = n;
    while (r - l > 1) {
      int mid = (l + r) >> 1;
      if (ans[mid] <= tmp)
        r = mid;
      else
        l = mid;
    }
    int cur = (ans[l] <= tmp ? l : r);
    printf("%d\n", cur);
  }
  return 0;
}
