#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000000 + 7;
const long long MOD1 = 998244353;
long long mod(long long x) { return (x % MOD + MOD) % MOD; }
long long mul(long long a, long long b) { return mod(mod(a) * mod(b)); }
string itos(long long s) {
  string str = to_string(s);
  return str;
}
long long stoi2(string s) {
  long long a = atoi(s.c_str());
  return a;
}
long long powerm(long long a, long long b, long long MOD) {
  a %= MOD;
  long long res = 1;
  while (b > 0) {
    if (b & 1) res = res * a % MOD;
    a = a * a % MOD;
    b >>= 1;
  }
  return res;
}
long long power(long long a, long long b) {
  long long res = 1;
  while (b > 0) {
    if (b & 1) res = res * a;
    a = a * a;
    b >>= 1;
  }
  return res;
}
bool isSubSequence(string str1, string str2, int m, int n) {
  if (m == 0) return true;
  if (n == 0) return false;
  if (str1[m - 1] == str2[n - 1])
    return isSubSequence(str1, str2, m - 1, n - 1);
  return isSubSequence(str1, str2, m, n - 1);
}
bool ispalindrome(long long len, string str) {
  for (int i = 0; i < len / 2; i++) {
    if (str[i] != str[len - 1 - i]) {
      return false;
    }
  }
  return true;
}
inline bool isPowerOfTwo(long long x) {
  return ((1LL << (long long)log2(x)) == x);
}
long long isprime(long long N) {
  if (N < 2 || (!(N & 1) && N != 2)) return 0;
  for (long long i = 3; i * i <= N; i += 2) {
    if (!(N % i)) return 0;
  }
  return 1;
}
vector<long long> factor;
void factors(long long n) {
  for (long long i = 1; i <= sqrt(n); i++) {
    if (n % i == 0) {
      if (i == n / i)
        factor.push_back(i);
      else {
        factor.push_back(i);
        factor.push_back(n / i);
      }
    }
  }
  sort((factor).begin(), (factor).end());
}
long long gcd(long long a, long long b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
long long lcm(long long a, long long b) { return (a / gcd(a, b)) * b; }
bool isvalid(long long i, long long j, long long n) {
  if (i >= 0 && i < n && j >= 0 && j < n) return true;
  return false;
}
long long dx[8] = {0, 1, 1, 1, 0, -1, -1, -1};
long long dy[8] = {-1, -1, 0, 1, 1, 1, 0, -1};
long long binarytodecimal(string n) {
  string num = n;
  long long dec_value = 0;
  long long base = 1;
  long long len = num.length();
  for (int i = len - 1; i >= 0; i--) {
    if (num[i] == '1') dec_value += base;
    base = base * 2;
  }
  return dec_value;
}
long long extended_GCD(long long a, long long b, long long &x, long long &y) {
  if (a == 0) {
    x = 0;
    y = 1;
    return b;
  }
  long long x1, y1;
  long long gcd = extended_GCD(b % a, a, x1, y1);
  x = y1 - (b / a) * x1;
  y = x1;
  return gcd;
}
long long modinv(long long a, long long mod = MOD) {
  long long x, y;
  extended_GCD(a, mod, x, y);
  if (x < 0) x += mod;
  return x;
}
string dtb(long long n) {
  string s = "";
  while (n > 0) {
    if (n % 2 == 0)
      s.push_back('0');
    else
      s.push_back('1');
    n /= 2;
  }
  reverse((s).begin(), (s).end());
  return s;
}
long long getfactorisation(long long n) {
  long long N = 5e6 + 5;
  vector<long long> fact(N);
  for (int i = 0; i < N; i++) fact[i] = i;
  for (int i = 2; i < N; i += 2) fact[i] = 2;
  for (long long i = 3; i <= N; i += 2)
    if (i == fact[i])
      for (long long j = i * i; j < N; j += i)
        if (fact[j] == j) fact[j] = i;
  vector<long long> res;
  while (n > 1) {
    res.push_back(fact[n]);
    n /= fact[n];
  }
  return res.size();
}
long long maxPrimeFactor(long long n) {
  long long maxPrime = -1;
  while (n % 2 == 0) {
    maxPrime = 2;
    n >>= 1;
  }
  for (int i = 3; i <= sqrt(n); i += 2) {
    while (n % i == 0) {
      maxPrime = i;
      n = n / i;
    }
  }
  if (n > 2) maxPrime = n;
  return maxPrime;
}
vector<long long> seive;
void Seive() {
  const long long maxn = 1e6 + 5;
  seive.resize(maxn);
  for (long long i = (long long)0; i < (long long)maxn; i++) seive[i] = i;
  for (long long i = 2; i <= maxn; i += 2) seive[i] = 2;
  seive[1] = -1;
  seive[0] = -1;
  for (long long i = 3; i <= maxn; i += 2)
    if (i == seive[i])
      for (long long j = i * i; j < maxn; j += i)
        if (seive[j] == j) seive[j] = i;
}
void factorisation(long long n) {
  vector<long long> res;
  for (long long i = 2; i * i <= n; i++) {
    if (n % i == 0) {
      while (n % i == 0) {
        n /= i;
        res.push_back(i);
      }
    }
  }
  if (n > 1) res.push_back(n);
}
long long fac[200005];
unsigned long long modInverse(unsigned long long n, int p) {
  return powerm(n, p - 2, p);
}
long long nCrModPFermat(unsigned long long n, int r, int p) {
  if (n < r) return 0;
  if (r == 0) return 1;
  unsigned long long fac[n + 1];
  fac[0] = 1;
  for (int i = 1; i <= n; i++) fac[i] = (fac[i - 1] * i) % p;
  return (fac[n] * modInverse(fac[r], p) % p * modInverse(fac[n - r], p) % p) %
         p;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  long long T = 1;
  while (T--) {
    long long n, q;
    cin >> n >> q;
    vector<long long> v(n), k(q);
    for (long long i = (long long)0; i < (long long)n; i++) cin >> v[i];
    for (long long i = (long long)0; i < (long long)q; i++) cin >> k[i];
    for (long long i = (long long)1; i < (long long)n; i++) v[i] += v[i - 1];
    long long sum = 0;
    for (long long i = (long long)0; i < (long long)q; i++) {
      sum += k[i];
      long long lower = (lower_bound(v.begin(), v.end(), sum) - v.begin());
      if (lower == n) {
        cout << n;
        sum = 0;
      } else {
        if (v[lower] > sum) {
          if (lower == 0) {
            cout << n;
          } else {
            lower--;
            cout << n - lower - 1;
          }
        } else {
          if (lower == n - 1) {
            cout << n;
            sum = 0;
          } else
            cout << n - lower - 1;
        }
      }
      cout << '\n';
    }
  }
}
