#include <bits/stdc++.h>
using namespace std;
long long a[500005], b[500005], dp[500005], t;
vector<long long> c;
void poisk_del(long long z) {
  for (int del = 2; del * del <= z; del++) {
    if (z % del == 0) c.push_back(del);
    while (z % del == 0) {
      z /= del;
    }
  }
  if (z != 1) c.push_back(z);
}
void add(int s) {
  for (long long mask = 1; mask < (1 << s); mask++) {
    long long proz = 1;
    int kol = 0;
    for (int j = 0; j < s; j++) {
      if ((mask & (1 << j)) > 0) {
        proz *= c[j];
        kol++;
      }
    }
    if (kol % 2 == 1) {
      t += dp[proz];
      dp[proz]++;
    } else {
      t -= dp[proz];
      dp[proz]++;
    }
  }
}
void delet(int s) {
  for (long long mask = 1; mask < (1 << s); mask++) {
    long long proz = 1;
    int kol = 0;
    for (int j = 0; j < s; j++) {
      if ((mask & (1 << j)) > 0) {
        proz *= c[j];
        kol++;
      }
    }
    if (kol % 2 == 1) {
      dp[proz]--;
      t -= dp[proz];
    } else {
      dp[proz]--;
      t += dp[proz];
    }
  }
}
int main() {
  long long n, q;
  cin >> n >> q;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
  }
  n = 0;
  for (int i = 0; i < q; i++) {
    int x;
    cin >> x;
    x--;
    c.clear();
    if (b[x] == 0) {
      n++;
      b[x] = 1;
      poisk_del(a[x]);
      int s = c.size();
      long long ans = (n * (n + 1) / 2) - n;
      add(s);
      cout << ans - t << endl;
    } else {
      n--;
      b[x] = 0;
      poisk_del(a[x]);
      int s = c.size();
      long long ans = (n * (n + 1) / 2) - n;
      delet(s);
      cout << ans - t << endl;
    }
  }
}
