#include <bits/stdc++.h>
using namespace std;
const int MOD = (int)(1e9 + 7);
int dp[60][10000 + 5];
int p_pow[60];
int mul(long long a, long long b, int mod) {
  long long ans = a;
  ans *= b;
  ans %= mod;
  if (ans < 0) ans += mod;
  return ans;
}
int add(int a, int b, int mod) {
  long long ans = a;
  ans += b;
  ans %= mod;
  if (ans < 0) ans += mod;
  return ans;
}
int pow(int a, int b, int mod) {
  if (b == 0) return 1;
  if ((b & 1) == 1)
    return mul(a, pow(a, b - 1, mod), mod);
  else {
    int aux = pow(a, b >> 1, mod);
    return mul(aux, aux, mod);
  }
}
int inv(int x, int mod) { return pow(x, mod - 2, mod); }
int p;
int rec(int cur_pow, int k, int mod) {
  if (k == 0) {
    return p_pow[cur_pow];
  }
  int& ans = dp[cur_pow][k];
  if (ans != -1) return ans;
  ans = 0;
  for (int i = 0; i <= cur_pow; i++) {
    ans = add(ans, rec(i, k - 1, mod), mod);
  }
  ans = mul(ans, inv(cur_pow + 1, mod), mod);
  return ans;
}
int solve(int cur_pow, int k, int _p) {
  for (int i = 0; i <= cur_pow; i++)
    for (int j = 0; j <= k; j++) dp[i][j] = -1;
  p_pow[0] = 1;
  p = _p;
  for (int i = 1; i <= cur_pow; i++) p_pow[i] = mul(p_pow[i - 1], p, MOD);
  int res = rec(cur_pow, k, MOD);
  return res;
}
int main() {
  long long n;
  int k;
  cin >> n >> k;
  long long aux_n = n;
  int ans = 1;
  for (long long i = 2; n > 1 && i * i <= aux_n; i++) {
    if (n % i == 0) {
      int cur_pow = 0;
      while (n % i == 0) n /= i, cur_pow++;
      int res = solve(cur_pow, k, i);
      ans = mul(ans, res, MOD);
    }
  }
  if (n > 1) {
    int res = solve(1, k, mul(n, 1, MOD));
    ans = mul(ans, res, MOD);
  }
  cout << ans << endl;
  return 0;
}
