#include <bits/stdc++.h>
const int MAXN = 100100;
struct Gao {
  int p[MAXN], q[MAXN];
  bool r[MAXN];
  void init(int n) {
    for (int i = 0; i < n; ++i) {
      q[i] = 1;
      r[i] = true;
    }
  }
  void next(int i) {
    if (!r[p[i]] && p[i] != i) {
      next(p[i]);
      q[i] += q[p[i]];
      p[i] = p[p[i]];
    }
  }
  void kill(int i) {
    if (r[i]) {
      next(i);
      r[i] = false;
    }
  }
} gao;
int main() {
  int n, m, x, y, z;
  static int a[MAXN], b[MAXN];
  scanf("%d%d", &n, &m);
  gao.init(n);
  for (int i = 0; i < n; ++i) {
    scanf("%d", &gao.p[i]);
    --gao.p[i];
  }
  for (int i = 0; i < m; ++i) {
    scanf("%d", &a[i]);
    --a[i];
  }
  for (int i = 0; i < m; ++i) {
    scanf("%d", &b[i]);
  }
  z = 0;
  for (int i = 0; i < m; ++i) {
    x = (a[i] + z) % n;
    y = b[i];
    z = 0;
    while (true) {
      if (!gao.r[x]) {
        gao.next(x);
        y -= gao.q[x];
        x = gao.p[x];
      }
      if (gao.r[x] && y > 0) {
        ++z;
        gao.kill(x);
      } else {
        break;
      }
    }
    printf("%d\n", z);
  }
  return 0;
}
