#include <bits/stdc++.h>
using namespace std;
int f[50], mod = 1e9 + 7;
long long n, m, ans;
int k;
int qp(int x) {
  int k = mod - 2, res = 1;
  while (k) {
    if (k & 1) res = 1ll * res * x % mod;
    x = 1ll * x * x % mod;
    k >>= 1;
  }
  return res;
}
int dv[51];
int dp(long long p, int cnt) {
  memset(f, 0, sizeof(f));
  f[cnt] = 1;
  for (int i = 1; i <= k; i++) {
    int sum = 0;
    for (int j = cnt; j >= 0; j--) {
      sum = (sum + 1ll * f[j] * dv[j + 1]) % mod;
      f[j] = sum;
    }
  }
  int res = 0;
  for (int i = 0, tmp = 1; i <= cnt; i++, tmp = tmp * p % mod)
    res = (res + 1ll * f[i] * tmp) % mod;
  return res;
}
void work() {
  m = n;
  ans = 1;
  for (int i = 2; 1ll * i * i <= n; i++)
    if (m % i == 0) {
      int cnt = 0;
      while (m % i == 0) m /= i, cnt++;
      ans *= dp(i, cnt), ans %= mod;
    }
  if (m != 1) {
    ans *= dp(m, 1);
    ans %= mod;
  }
  printf("%lld\n", ans);
}
int main() {
  scanf("%lld%d", &n, &k);
  for (int i = 1; i <= 50; i++) dv[i] = qp(i);
  work();
  return 0;
}
