#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline void read(T& w) {
  char c, p = 0;
  while (!isdigit(c = getchar()))
    if (c == '-') p = 1;
  w = c ^ '0';
  while (isdigit(c = getchar())) w = w * 10 + (c ^ '0');
  if (p) w = -w;
}
template <typename T, typename U>
inline char smax(T& x, const U& y) {
  return x < y ? x = y, 1 : 0;
}
template <typename T, typename U>
inline char smin(T& x, const U& y) {
  return x > y ? x = y, 1 : 0;
}
const int N = 755, M = 2e5 + 5;
int n, m, a[N], t, p1[N], p2[M], ans[M];
long long f[N][N], b[M], s[N];
inline bool cmp1(int i, int j) { return f[1][i] > f[1][j]; }
inline bool cmp2(int i, int j) { return b[i] < b[j]; }
int main() {
  read(n), read(m);
  for (int i(1); i <= (n); ++i)
    if ((read(a[i]), s[i] = s[i - 1] + a[i], a[i]) <= 0) ++t;
  f[n][0] = s[n], f[n][1] = s[n - 1];
  for (int i = n - 1; i; --i) {
    int r = min(t, n - i + 1);
    f[i][0] = min(f[i + 1][0], s[i]);
    for (int j(1); j <= (r); ++j)
      f[i][j] = f[i + 1][j - 1] - a[i],
      j <= n - i && smax(f[i][j], min(f[i + 1][j], s[i]));
  }
  for (int i(0); i <= (t); ++i) p1[i] = i;
  sort(p1, p1 + 1 + t, cmp1);
  for (int i(1); i <= (m); ++i) read(b[i]), p2[i] = i;
  sort(p2 + 1, p2 + 1 + m, cmp2);
  int now = t + 1, l = 0;
  for (int i(1); i <= (m); ++i) {
    int& x = p2[i];
    while (l <= t && b[x] + f[1][p1[l]] >= 0) smin(now, p1[l++]);
    ans[x] = now;
  }
  for (int i(1); i <= (m); ++i) printf("%d\n", ans[i]);
  return 0;
}
