#include <bits/stdc++.h>
using namespace std;
const int md = 1e9 + 7;
inline int add(int a, int b) { return ((long long)a + b) % md; }
inline int sub(int a, int b) { return ((long long)a - b + md) % md; }
inline int mul(int a, int b) { return ((long long)a * b) % md; }
int power(int a, long long b) {
  int res = 1;
  while (b > 0) {
    if (b & 1) {
      res = mul(res, a);
    }
    a = mul(a, a);
    b >>= 1;
  }
  return res;
}
int inv(int a) { return power(a, md - 2); }
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  long long n;
  int k;
  cin >> n >> k;
  vector<pair<long long, int>> f;
  for (long long i = 2; i * i <= n; i++) {
    if (n % i == 0) {
      int cnt = 0;
      while (n % i == 0) {
        n /= i;
        cnt++;
      }
      f.emplace_back(i, cnt);
    }
  }
  if (n > 1) {
    f.emplace_back(n, 1);
  }
  int ans = 1;
  for (auto &p : f) {
    int cnt = p.second;
    vector<vector<int>> dp(k + 1, vector<int>(cnt + 1, 0));
    dp[0][cnt] = 1;
    for (int i = 0; i < k; i++) {
      for (int j = 0; j <= cnt; j++) {
        int cur = mul(dp[i][j], inv(j + 1));
        for (int t = 0; t <= j; t++) {
          dp[i + 1][t] = add(dp[i + 1][t], cur);
        }
      }
    }
    int sum = 0;
    int cur = 1;
    for (int j = 0; j <= cnt; j++) {
      sum = add(sum, mul(cur, dp[k][j]));
      cur = mul(cur, p.first % md);
    }
    ans = mul(ans, sum);
  }
  cout << ans << "\n";
  return 0;
}
