#include <bits/stdc++.h>
using namespace std;
long long n, m, i, j, ans, x, vis[200005], cnt[500005];
vector<long long> num[200005];
void ins(long long x) {
  int i, j, t;
  for (i = 0; i < (1 << num[x].size()); i++) {
    t = 1;
    for (j = 0; j < num[x].size(); j++) {
      if ((i >> j) & 1) {
        t *= num[x][j];
        if (t > 500000) {
          t = -1;
          break;
        }
      }
    }
    if (t == -1) continue;
    if (__builtin_popcount(i) & 1)
      ans -= cnt[t];
    else
      ans += cnt[t];
  }
  for (i = 0; i < (1 << num[x].size()); i++) {
    t = 1;
    for (j = 0; j < num[x].size(); j++) {
      if ((i >> j) & 1) {
        t *= num[x][j];
        if (t > 500000) {
          t = -1;
          break;
        }
      }
    }
    if (t == -1) continue;
    cnt[t]++;
  }
}
void del(long long x) {
  int i, j, t;
  for (i = 0; i < (1 << num[x].size()); i++) {
    t = 1;
    for (j = 0; j < num[x].size(); j++) {
      if ((i >> j) & 1) {
        t *= num[x][j];
        if (t > 500000) {
          t = -1;
          break;
        }
      }
    }
    if (t == -1) continue;
    cnt[t]--;
  }
  for (i = 0; i < (1 << num[x].size()); i++) {
    t = 1;
    for (j = 0; j < num[x].size(); j++) {
      if ((i >> j) & 1) {
        t *= num[x][j];
        if (t > 500000) {
          t = -1;
          break;
        }
      }
    }
    if (t == -1) continue;
    if (__builtin_popcount(i) & 1)
      ans += cnt[t];
    else
      ans -= cnt[t];
  }
}
int main() {
  scanf("%I64d%I64d", &n, &m);
  for (i = 1; i <= n; i++) {
    scanf("%I64d", &x);
    for (j = 2; (j) * (j) <= x; j++) {
      if (x % j == 0) {
        num[i].push_back(j);
        while (x % j == 0) x /= j;
      }
    }
    if (x > 1) num[i].push_back(x);
    sort(num[i].begin(), num[i].end());
  }
  while (m--) {
    scanf("%I64d", &x);
    if (vis[x])
      del(x);
    else
      ins(x);
    vis[x] ^= 1;
    printf("%I64d\n", ans);
  }
  return 0;
}
