#include <bits/stdc++.h>
using namespace std;
const int maxn = 2000010;
const int Mod = 1e9 + 7;
long long ans, a[maxn], f[maxn], rev[maxn], tot, mp[60][60], M[60][60], sum, K;
long long qpow(long long a, long long x) {
  long long res = 1LL;
  a %= Mod;
  while (x) {
    if (x & 1LL) res = 1LL * res * a % Mod;
    a = 1LL * a * a % Mod;
    x >>= 1;
  }
  return res;
}
long long get(long long p) {
  f[p]++;
  long long tmp = qpow(qpow(f[p], K), Mod - 2), res = 0;
  for (long long i = 1; i <= f[p]; i++) {
    res = (res + 1LL * mp[f[p]][i] * tmp % Mod) % Mod;
    tmp = tmp * a[p] % Mod;
  }
  return res;
}
void solve(long long p) {
  long long tmp = 1LL;
  mp[p][p] = 1LL;
  for (long long i = 1; i <= K; i++) {
    for (long long j = 1; j <= p; j++)
      M[p][j] = 1LL * mp[p][j] * p % Mod, mp[p][j] = 0;
    for (long long j = 1; j <= p; j++) {
      for (long long k = 1; k <= j; k++)
        mp[p][k] = (mp[p][k] + 1LL * M[p][j] * rev[j] % Mod) % Mod;
    }
  }
}
int main() {
  long long N, tN;
  scanf("%lld%d", &N, &K);
  tN = N;
  rev[0] = 1;
  for (long long i = 1; i <= 51; i++) rev[i] = qpow(i, Mod - 2);
  for (long long i = 1; i <= 51; i++) solve(i);
  ans = 1LL;
  for (long long i = 2; i * i <= tN; i++) {
    if (tN % i == 0) {
      a[++tot] = i;
      while (tN % i == 0) tN /= i, f[tot]++;
    }
  }
  if (tN > 1) a[++tot] = tN % Mod, f[tot] = 1;
  for (long long i = 1; i <= tot; i++) ans = 1LL * ans * get(i) % Mod;
  printf("%lld\n", ans);
  return 0;
}
