#include <bits/stdc++.h>
using namespace std;
const int INF = 1000000000;
const int dir_4[4][2] = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};
const int dir_8[8][2] = {{1, 0},  {1, 1},   {0, 1},  {-1, 1},
                         {-1, 0}, {-1, -1}, {0, -1}, {1, -1}};
const long long M = 1000000007;
long long modpow(long long x, long long k) {
  if (k == 0) return 1;
  long long ret = modpow(x, k / 2);
  ret *= ret;
  ret %= M;
  if (k % 2 == 1) {
    ret *= x;
    ret %= M;
  }
  return ret;
}
vector<pair<long long, long long> > pr(long long n) {
  vector<pair<long long, long long> > ret;
  for (long long i = 2; i * i <= n; i++) {
    if (n % i == 0) {
      pair<long long, long long> p = pair<long long, long long>(i, 0);
      while (n % i == 0) {
        n /= i;
        p.second++;
      }
      ret.push_back(p);
    }
  }
  if (n > 1) ret.push_back(pair<long long, long long>(n, 1));
  return ret;
}
int main() {
  long long n, k;
  cin >> n >> k;
  vector<pair<long long, long long> > vec = pr(n);
  long long ret = 1;
  long long inv[52] = {};
  for (int i = 0; i < 52; i++) {
    inv[i] = modpow(i + 1, M - 2);
  }
  for (pair<long long, long long> p : vec) {
    long long dp[52] = {};
    dp[p.second] = 1;
    for (int i = 0; i < k; i++) {
      for (int j = 0; j < p.second + 1; j++) {
        dp[j] *= inv[j];
        dp[j] %= M;
      }
      for (int j = p.second - 1; j >= 0; j--) {
        dp[j] += dp[j + 1];
        if (dp[j] >= M) dp[j] -= M;
      }
    }
    long long sum = 0;
    for (int i = 0; i < p.second + 1; i++) {
      sum += modpow(p.first, i) * dp[i];
      sum %= M;
    }
    ret *= sum;
    ret %= M;
  }
  cout << ret << endl;
}
