#include <bits/stdc++.h>
using namespace std;
long long n, m, ans = 1;
long long qpow(long long a, long long x) {
  long long ans = 1;
  while (x) {
    if (x & 1LL) ans = ans * a % 1000000007;
    a = a * a % 1000000007;
    x >>= 1LL;
  }
  return ans;
}
long long inv(long long a) { return qpow(a, 1000000007 - 2); }
long long f[100];
long long getans(long long a, long long cnt) {
  memset(f, 0, sizeof(f));
  f[cnt] = 1;
  long long times, i, x, ans = 0;
  for (times = 0; times < m; times++) {
    for (i = cnt; i >= 0; i--)
      f[i] = (f[i + 1] + f[i] * inv(i + 1)) % 1000000007;
  }
  x = 1;
  for (i = 0; i <= cnt; i++) {
    ans = (ans + x * f[i]) % 1000000007;
    x = x * a % 1000000007;
  }
  return ans;
}
int main() {
  scanf("%lld%lld", &n, &m);
  long long i, cnt;
  for (i = 2; i * i <= n; i++)
    if (n % i == 0) {
      cnt = 0;
      while (n % i == 0) {
        n /= i;
        cnt++;
      }
      ans = ans * getans(i, cnt) % 1000000007;
    }
  if (n != 1) ans = ans * getans(n, 1) % 1000000007;
  printf("%lld", ans);
}
