#include <bits/stdc++.h>
using namespace std;
const int K = 1e4 + 5, mod = 1e9 + 7;
int dp[50][K];
int fp(long long a, int p) {
  if (!p) return 1;
  int t = fp(a, p >> 1);
  t = (t * 1LL * t) % mod;
  if (p & 1) t = (t * 1LL * a) % mod;
  return t;
}
long long current_prime;
int pre[52];
int solve(int power, int k) {
  if (!k) return fp(current_prime, power);
  int &ret = dp[power][k];
  if (ret != -1) return ret;
  ret = 0;
  int pw = pre[power + 1];
  for (int new_power = 0; new_power <= power; new_power++) {
    ret = (ret + (solve(new_power, k - 1) * 1LL * pw) % mod) % mod;
  }
  return ret;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  for (int i = 0; i < 52; i++) pre[i] = fp(i, mod - 2);
  long long n, k;
  cin >> n >> k;
  long long ans = 1;
  for (long long i = 2; i * i <= n; i++) {
    int power = 0;
    while (n % i == 0) n /= i, power++;
    if (power != 0) {
      memset(dp, -1, sizeof(dp));
      current_prime = i;
      ans = (ans * 1LL * solve(power, k)) % mod;
    }
  }
  if (n > 1) {
    memset(dp, -1, sizeof(dp));
    current_prime = n;
    ans = (ans * 1LL * solve(1, k)) % mod;
  }
  cout << ans << endl;
  return 0;
}
