#include <bits/stdc++.h>
using namespace std;
long long power(long long a, long long b, long long mod) {
  long long x = 1, y = a;
  while (b > 0) {
    if (b % 2) {
      x = (x * y) % mod;
    }
    y = (y * y) % mod;
    b /= 2;
  }
  return x % mod;
}
long long modular_inverse(long long n, long long mod) {
  return power(n, mod - 2, mod);
}
int main() {
  long long n, k;
  cin >> n >> k;
  vector<pair<long long, long long> > v;
  int count = 0;
  while (!(n % 2)) {
    n >>= 1;
    count++;
  }
  if (count) {
    pair<long long, long long> p = {2, count};
    v.push_back(p);
  }
  for (long long i = 3; i <= sqrt(n); i += 2) {
    count = 0;
    while (n % i == 0) {
      count++;
      n = n / i;
    }
    if (count) {
      pair<long long, long long> p = {i, count};
      v.push_back(p);
    }
  }
  if (n > 2) {
    pair<long long, long long> p = {n, 1};
    v.push_back(p);
  }
  pair<long long, long long> ans = {1, 1};
  for (long long c = 0; c < v.size(); c++) {
    long long p = v[c].first;
    long long a = v[c].second;
    pair<long long, long long> dp[a + 1][k + 1];
    for (long long i = 0; i <= a; i++)
      for (long long j = 0; j <= k; j++) dp[i][j] = {0, 1};
    dp[0][0] = {1, 1};
    for (long long i = 1; i <= a; i++)
      dp[i][0] = {(dp[i - 1][0].first * p) % 1000000007, 1};
    for (long long j = 1; j <= k; j++) {
      for (long long i = 0; i <= a; i++) {
        for (long long l = 0; l <= i; l++) {
          dp[i][j].first =
              ((dp[i][j].first * dp[l][j - 1].second) % 1000000007 +
               (dp[i][j].second * dp[l][j - 1].first) % 1000000007) %
              1000000007;
          dp[i][j].second =
              (dp[i][j].second * dp[l][j - 1].second) % 1000000007;
        }
        dp[i][j].second = (dp[i][j].second * (i + 1)) % 1000000007;
      }
    }
    ans.first = (ans.first * dp[a][k].first) % 1000000007;
    ans.second = (ans.second * dp[a][k].second) % 1000000007;
  }
  long long p = ans.first;
  long long q = ans.second;
  cout << (modular_inverse(q, 1000000007) * p) % 1000000007;
  return 0;
}
