#include<iostream>
#include<vector>
using namespace std;
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int n, m;
    cin >> n >> m;
    vector<int> pri;    // 质数表
    vector<bool>f(n+1); // f[i]=true 表示 i不是质数
    vector<int> d(n+1), p(n+1), e(n+1), ans(n+1);
    // d[i] -> i的因子个数(包含1)
    // p[i] -> i的质因子个数
    // e[i] -> i的最小质因子指数
    p[1] = e[1] = 0;
    f[1] = true;
    d[1] = 1; 
    
    // 线性筛(欧拉筛)
    for (int i = 2; i <= n; i++) {
        if (!f[i]) {
            pri.push_back(i);
            p[i] = e[i] = 1;
            d[i] = 2;
        }

        int k = d[i] - p[i] - 1;  // i的合数因子个数
        ans[k]++;

        for (int q : pri) {
            if (1LL*i*q > n) break;
            int x = i*q;
            f[x] = true;
            if (i % q == 0) {  // 找出 i 的最小质因子,此时也是 i*q 的最小质因子
                p[x] = p[i];
                e[x] = e[i] + 1;
                d[x] = d[i] / (e[i]+1) * (e[i]+2);
                break;  // 大于最小质因子的质数都无需处理
            }
            // 当 q 小于 i 的最小质因子时才会进入下列语句,说明 q 是 i*q 的最小质因子
            e[x] = 1;
            p[x] = p[i] + 1;
            d[x] = d[i] * 2;
        }
    }

    for (int i = 1, k; i <= m; i++)
        cin >> k, cout << ans[k] << '\n';
    return 0;
}