#include <bits/stdc++.h>
using namespace std;
const int maxn = 65, maxk = 10010, mod = 1e9 + 7;
int k;
int inv[maxn], f[maxk][maxn];
int sol(long long x, int cnt) {
  x %= mod;
  memset(f, 0, sizeof(f));
  f[0][cnt] = 1;
  for (int i = 0; i <= k - 1; ++i)
    for (int j = 0; j <= cnt; ++j)
      if (f[i][j])
        for (int w = 0; w <= j; ++w)
          (f[i + 1][w] += (long long)f[i][j] * inv[j + 1] % mod) %= mod;
  int now = 1, ret = 0;
  for (int i = 0; i <= cnt; ++i)
    (ret += (long long)f[k][i] * now % mod) %= mod,
        now = (long long)now * x % mod;
  return ret;
}
int main() {
  inv[0] = inv[1] = 1;
  for (int i = 2; i <= 60; ++i)
    inv[i] = (long long)(mod - mod / i) * inv[mod % i] % mod;
  long long n;
  scanf("%lld %d", &n, &k);
  int ans = 1;
  for (int i = 2; (long long)i * i <= n; ++i) {
    int cnt = 0;
    while (n % i == 0) ++cnt, n /= i;
    if (cnt) ans = (long long)ans * sol(i, cnt) % mod;
  }
  if (n > 1) ans = (long long)ans * sol(n, 1) % mod;
  cout << ans << endl;
  return 0;
}
