#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int maxn = 1e5 + 10;
long long n, k;
vector<pair<long long, long long> > F;
long long qpow(long long a, long long x) {
  long long ans = 1;
  for (; x; x >>= 1, a = a * a % mod)
    if (x & 1) ans = ans * a % mod;
  return ans;
}
long long f[maxn], g[maxn], inv[maxn];
void pre() {
  int i;
  inv[1] = 1;
  for (i = 2; i < maxn; i++) inv[i] = qpow(i, mod - 2);
}
void Fac() {
  long long i, p, c;
  for (i = 2; i * i <= n; i++)
    if (!(n % i)) {
      p = i;
      c = 0;
      while (!(n % i)) n /= i, c++;
      F.push_back(pair<long long, long long>(p, c));
    }
  if (n ^ 1) F.push_back(pair<long long, long long>(n, 1));
}
long long solve(long long p, long long x) {
  int i, j, l;
  long long ans = 0, cur;
  for (i = 0; i <= x; i++) f[i] = 0, g[i] = 0;
  f[x] = 1;
  for (j = 0; j < k; j++) {
    for (i = 0; i <= x; i++) {
      for (l = 0; l <= i; l++) g[l] = (g[l] + f[i] * inv[i + 1]) % mod;
    }
    for (i = 0; i <= x; i++) f[i] = g[i], g[i] = 0;
  }
  cur = 1;
  for (i = 0; i <= x; i++) {
    ans = (ans + cur * f[i]) % mod;
    (cur *= p) %= mod;
  }
  return ans;
}
int main() {
  pre();
  cin >> n >> k;
  Fac();
  int i;
  long long fans = 1;
  for (i = 0; i < (int)F.size(); i++)
    fans = fans * solve(F[i].first, F[i].second) % mod;
  printf("%lld\n", fans);
  return 0;
}
