#include <bits/stdc++.h>
using namespace std;
const int W = 50;
const int K = 10001;
const int mod = 1000000007;
int cnt, k;
long long n, ans;
long long f[K][W];
long long inv(int x) {
  long long res = 1, base = x;
  int p = mod - 2;
  while (p) {
    if (p & 1) (res *= base) %= mod;
    (base *= base) %= mod, p >>= 1;
  }
  return res;
}
void dp(long long p, int q) {
  f[0][q] = 1, p %= mod;
  for (int i = 1; i <= k; i++) {
    f[i][q + 1] = 0;
    for (int j = q; j >= 0; j--)
      f[i][j] = (f[i][j + 1] + f[i - 1][j] * inv(j + 1)) % mod;
  }
  long long tot = 0, res = 1;
  for (int i = 0; i <= q; i++) {
    (tot += f[k][i] * res) %= mod;
    (res *= p) %= mod;
  }
  (ans *= tot) %= mod, f[0][q] = 0;
  return;
}
int main() {
  scanf("%I64d%d", &n, &k), ans = 1;
  for (long long i = 2;; i++) {
    if (n == 1) break;
    if (i * i > n) break;
    if (n % i == 0) {
      int t = 0;
      while (n % i == 0) n /= i, t++;
      dp(i, t);
    }
  }
  if (n != 1) dp(n, 1);
  printf("%I64d\n", ans);
  return 0;
}
