$$f_{i,j}=\sum_{k=j}^{cnt} \frac {f_{i-1, k}} {k+1}$$

$$f_{i, j+1}=\sum_{k=j+1}^{cnt} \frac {f_{i-1, k}} {k+1}$$

$$f_{i,j}=f_{i, j+1}+\frac{f_{i-1,j}}{j+1}$$

\begin{align} p&=ki+r\\ 0&=ki+r\quad(mod\;p)\\ 0&=k\times inv_r+inv_i\quad(mod\;p)\\ inv_i&=-k\times inv_r \quad(mod\;p)\\ inv_i&=(p-p/i)\times inv_{p\%i} \quad(mod\;p) \end{align}

#include<bits/stdc++.h>
#define fo(i, a, b) for (ll i = (a); i <= (b); ++i)
#define fd(i, a, b) for (ll i = (a); i >= (b); --i)
#define mod 1000000007
#define N 10005
#define ll long long
ll n, f[N][66], inv[66], ans, po[66], sq;
int k;
int main ()
{
scanf("%lld %d", &n, &k);
sq = std::min(n, (ll) (sqrt(n) + 1));
inv[1] = 1;
fo (i, 2, 65) inv[i] = (mod - mod / i) * inv[mod % i] % mod;
ans = 1;
fo (p, 2, sq)
{
if (n % p == 0)
{
int cnt = 1;
n /= p;
while (n % p == 0) ++cnt, n /= p;
memset(f[0], 0, sizeof f[0]);
f[0][cnt] = 1; po[0] = 1;
fo (i, 1, cnt) po[i] = po[i - 1] * p % mod;
fo (i, 1, k)
{
f[i][cnt + 1] = 0;
fd (j, cnt, 0)
f[i][j] = (f[i][j + 1] + f[i - 1][j] * inv[j + 1]) % mod;
}
ll now = 0;
fo (j, 0, cnt)
now = (now + f[k][j] * po[j]) % mod;
ans = ans * now % mod;
}
if (p == sq && n > 1)
p = n - 1, sq = n;
}
printf("%lld\n", ans);
return 0;
}