#include <bits/stdc++.h>
using namespace std;
long long n, k;
const long long N = 1e6 + 101;
const long long xkj = 1e9 + 7;
long long ksm(long long a, long long b, long long xkj) {
  long long res = 1;
  while (b) {
    if (b & 1) res = (res * a) % xkj;
    a = (a * a) % xkj;
    b >>= 1;
  }
  return res;
}
long long prime[N], cnt[N], tot;
map<long long, long long> mp;
long long f[233][10011];
long long solve(long long n, long long du, long long k, long long pos) {
  if (k == 0) {
    return f[du][k] = n % xkj;
  }
  if (f[du][k] != 0) return f[du][k];
  long long inv = ksm(du + 1, xkj - 2, xkj);
  for (long long i = 0; i <= du; i++)
    (f[du][k] += solve(ksm(prime[pos], i, 1e18), i, k - 1, pos) * inv % xkj) %=
        xkj;
  return f[du][k] % xkj;
}
signed main() {
  cin >> n >> k;
  long long x = n;
  for (long long i = 2; i * i <= x; i++) {
    if (x % i == 0) {
      prime[++tot] = i;
      while (x % i == 0) x /= i, ++cnt[tot];
    }
  }
  if (x > 1) prime[++tot] = x, cnt[tot] = 1;
  long long ans = 1;
  for (long long i = 1; i <= tot; i++) {
    memset(f, 0, sizeof(f));
    ans = ans * solve(ksm(prime[i], cnt[i], 1e18), cnt[i], k, i) % xkj;
  }
  cout << ans << endl;
}
