inline ll __read() { ll x(0), t(1); charo(getchar()); while (o < '0' || o > '9') { if (o == '-') t = -1; o = getchar(); } for (; o >= '0' && o <= '9'; o = getchar()) x = (x << 1) + (x << 3) + (o ^ 48); return x * t; }
ll S(ll x, ll j) { if (pr[j] > x) return0; ll k = id(x); ll ans = g[k] - j * (p + 1); for (ll i = j + 1; i <= cnt && pr[i] * pr[i] <= x; ++i) for (ll e = 1, sp = pr[i]; sp <= x; sp *= pr[i], ++e) ans += (p * e + 1) * (S(x / sp, i) + (e > 1)); return ans; }
signedmain() { init(ll(1e6));
ll t = __read(); while (t--) { tot = 0; n = __read(), p = __read(); sq = sqrt(n); for (ll l(1), r; l <= n; l = r + 1) { r = n / (n / l); w[++tot] = n / l; g[tot] = n / l - 1; if (w[tot] <= sq) id1[w[tot]] = tot; else id2[n / w[tot]] = tot; }
for (ll i = 1; i <= cnt; ++i) for (ll j = 1; j <= tot && pr[i] * pr[i] <= w[j]; ++j) { ll k = id(w[j] / pr[i]); g[j] -= g[k] - i + 1; } for (ll i = 1; i <= tot; ++i) g[i] *= (p + 1);