#include <bits/stdc++.h>
using namespace std;
long long n, q;
long long ans;
bool vis[500005];
long long a[500005], s[500005];
long long num[1000005], tot, cnt;
void _set(long long n) {
  long long i;
  tot = 0;
  for (i = 2; i <= n / i; i++) {
    if (n % i == 0) {
      s[tot++] = i;
      while (n % i == 0) n /= i;
    }
  }
  if (n != 1) s[tot++] = n;
}
long long _add() {
  long long i, j, k;
  long long ret = 0;
  for (i = 1; i < (1 << tot); i++) {
    long long mul = 1, c = 0;
    for (j = 0; j < tot; j++) {
      if ((1 << j) & i) mul *= s[j], c++;
    }
    if (c % 2)
      ret += num[mul];
    else
      ret -= num[mul];
    num[mul]++;
  }
  ans += (cnt - ret);
  cnt++;
  return ans;
}
long long _sub() {
  long long i, j, k;
  long long ret = 0;
  for (i = 1; i < (1 << tot); i++) {
    long long mul = 1, c = 0;
    for (j = 0; j < tot; j++) {
      if ((1 << j) & i) mul *= s[j], c++;
    }
    num[mul]--;
    if (c % 2)
      ret += num[mul];
    else
      ret -= num[mul];
  }
  cnt--;
  ans -= (cnt - ret);
  return ans;
}
int main() {
  long long i, j, k, x;
  cnt = ans = 0;
  scanf("%I64d%I64d", &n, &q);
  for (i = 1; i <= n; i++) scanf("%I64d", &a[i]);
  while (q--) {
    scanf("%I64d", &x);
    _set(a[x]);
    if (vis[x]) {
      vis[x] = false;
      printf("%I64d\n", _sub());
    } else {
      vis[x] = true;
      printf("%I64d\n", _add());
    }
  }
  return 0;
}
