#include <bits/stdc++.h>
using namespace std;
const long long md = 1000000007;
long long pw(long long b, long long e, long long m) {
  long long t = 1;
  while (e) {
    if (e % 2) {
      t *= b;
      t %= m;
    }
    b *= b;
    b %= m;
    e = e >> 1;
  }
  return t;
}
int main() {
  long long n, k, dt = 1, dp[2][60] = {};
  cin >> n >> k;
  for (long long i = 2; i * i <= n; i++) {
    long long to = 1, cr = 1, tc = 0;
    while (n % i == 0) {
      n /= i;
      to++;
    }
    if (to > 1) {
      for (long long j = 0; j < to; j++) {
        dp[1][j] = pw(to, md - 2, md);
      }
      for (long long j = 2; j <= k; j++) {
        dp[j % 2][to - 1] = dp[(j - 1) % 2][to - 1] * pw(to, md - 2, md);
        dp[j % 2][to - 1] %= md;
        for (long long kk = to - 2; kk >= 0; kk--) {
          dp[j % 2][kk] = (dp[(j - 1) % 2][kk] * pw(kk + 1, md - 2, md)) % md +
                          dp[j % 2][kk + 1];
          dp[j % 2][kk] %= md;
        }
      }
      for (long long j = 0; j < to; j++) {
        tc = tc + (cr * dp[k % 2][j]) % md;
        tc %= md;
        cr *= i;
        cr %= md;
      }
      dt *= tc;
      dt %= md;
    }
  }
  if (n > 1) {
    long long to = 2, cr = 1, tc = 0;
    for (long long j = 0; j < to; j++) {
      dp[1][j] = pw(to, md - 2, md);
    }
    for (long long j = 2; j <= k; j++) {
      dp[j % 2][to - 1] = dp[(j - 1) % 2][to - 1] * pw(to, md - 2, md);
      dp[j % 2][to - 1] %= md;
      for (long long kk = to - 2; kk >= 0; kk--) {
        dp[j % 2][kk] = (dp[(j - 1) % 2][kk] * pw(kk + 1, md - 2, md)) % md +
                        dp[j % 2][kk + 1];
        dp[j % 2][kk] %= md;
      }
    }
    for (long long j = 0; j < to; j++) {
      tc = tc + (cr * dp[k % 2][j]) % md;
      tc %= md;
      cr *= n;
      cr %= md;
    }
    dt *= tc;
    dt %= md;
  }
  cout << dt << "\n";
  return 0;
}
