#include <bits/stdc++.h>
const int inf = 1e9;
const double eps = 1e-9;
const int mod = 1e9 + 7;
using namespace std;
int mypow(int x, int y) {
  int res = 1;
  for (; y >= 1; y >>= 1) {
    if (y & 1) res = (1ll * res * x) % mod;
    x = (1ll * x * x) % mod;
  }
  return res;
}
int32_t main() {
  long long n;
  int k;
  cin >> n >> k;
  vector<long long> p;
  vector<int> al;
  long long x = n;
  for (long long i = 2; i * i <= x; ++i) {
    if (!(x % i)) {
      p.push_back(i);
      al.push_back(0);
    }
    int c = 0;
    while (!(x % i)) {
      al[al.size() - 1]++;
      x /= i;
    }
  }
  if (x != 1) {
    p.push_back(x);
    al.push_back(1);
  }
  int ans = 1;
  for (int o = 0; o < p.size(); ++o) {
    vector<vector<int>> dp(k + 1, vector<int>(al[o] + 1, 0));
    dp[0][al[o]] = 1;
    for (int i = 1; i <= k; ++i) {
      for (int j = 0; j <= al[o]; ++j) {
        int s = (1ll * dp[i - 1][j] * mypow(j + 1, mod - 2)) % mod;
        for (int h = 0; h <= j; ++h) {
          dp[i][h] = (dp[i][h] + s) % mod;
        }
      }
    }
    int l = 0;
    int r = 1;
    for (int j = 0; j <= al[o]; ++j) {
      l = (l + (1ll * dp[k][j] * r) % mod) % mod;
      r = (1ll * r * (p[o] % mod)) % mod;
    }
    ans = (1ll * ans * l) % mod;
  }
  cout << ans;
  return 0;
}
