longlongqpow(longlong a, longlong n){ longlong res = 1; for (; n; n >>= 1, a = a * a % MOD) if (n & 1) res = res * a % MOD; return res; }
longlonginv(longlong x){ return qpow(x, MOD - 2); }
constint MAXK = 10005;
std::queue<std::pair<longlong, int> > q;
longlongcalc(longlong p, longlong n, longlong k){ staticlonglong f[2][MAXK]; for (int i = 0; i <= n; i++) f[0][i] = qpow(p, i);
int curr = 0, last = 1; for (int i = 0; i < k; i++) { for (int j = 1; j <= n; j++) { f[curr][j] += f[curr][j - 1]; f[curr][j] >= MOD ? f[curr][j] -= MOD : 0; } curr ^= 1, last ^= 1; for (int j = 0; j <= n; j++) f[curr][j] = f[last][j] * inv(j + 1) % MOD; }
return f[curr][n]; }
intmain(){ longlong n; int k; scanf("%lld %d", &n, &k);
longlong temp = n; for (longlong i = 2; i * i <= temp; i++) if (temp % i == 0) { int k = 0; while (temp % i == 0) { ++k; temp /= i; } q.emplace(i, k); } if (temp > 1) q.emplace(temp, 1);
longlong ans = 1; while (!q.empty()) { auto u = q.front(); q.pop();
longlong t = calc(u.first, u.second, k); ans = ans * t % MOD; }