#include <bits/stdc++.h>
using namespace std;
const int Mod(1e9 + 7);
int F[10003][63], inv[63], K;
int fexp(int x, int k) {
  int res = 1;
  for (; k; k >>= 1, x = (long long)x * x % Mod)
    if (k & 1) res = (long long)res * x % Mod;
  return res;
}
void dp(int T) {
  memset(F, 0, sizeof(F));
  F[0][T] = 1;
  for (int i = 1; i <= K; i++)
    for (int j = 0; j <= T; j++)
      for (int k = j; k <= T; k++)
        F[i][j] = (F[i][j] + (long long)F[i - 1][k] * inv[k + 1]) % Mod;
}
int main() {
  long long n;
  int ans = 1;
  scanf("%lld %d", &n, &K);
  for (int i = 0; i <= 51; i++) inv[i] = fexp(i, Mod - 2);
  for (long long i = 2; i * i <= n; i++)
    if (n % i == 0) {
      int cnt;
      for (cnt = 0; n % i == 0; n /= i, ++cnt)
        ;
      dp(cnt);
      int sum = 0;
      for (int j = 0, tmp = 1; j <= cnt; j++, tmp = (long long)tmp * i % Mod)
        sum = (sum + (long long)F[K][j] * tmp) % Mod;
      ans = (long long)ans * sum % Mod;
    }
  if (n > 1) {
    dp(1);
    int sum = 0;
    for (int j = 0, tmp = 1; j <= 1; j++, tmp = (long long)tmp * n % Mod)
      sum = (sum + (long long)F[K][j] * tmp) % Mod;
    ans = (long long)ans * sum % Mod;
  }
  printf("%d\n", ans);
  return 0;
}
