#include <bits/stdc++.h>
using namespace std;
const long long inf = 1e9 + 7;
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("Ofast")
int Inf = 1e9 + 7;
int Sum(int x, int y) {
  int ans = x + y;
  return (ans >= inf ? ans - Inf : ans);
}
int Sub(int x, int y) {
  int ans = x - y;
  return (ans < 0 ? ans + Inf : ans);
}
int Mul(int x, int y) { return (long long)x * y % Inf; }
int Pow(int x, int p) {
  int ans = 1, cur = x % Inf;
  for (int i = 1; i <= p; i <<= 1) {
    if (i & p) ans = Mul(ans, cur);
    cur = Mul(cur, cur);
  }
  return ans;
}
int inv(int x) { return Pow(x, Inf - 2); }
int main() {
  ios::sync_with_stdio(0), cin.tie(0);
  long long n;
  int k;
  cin >> n >> k;
  vector<pair<long long, int> > p;
  int deg, mx = 1;
  for (long long i = 2; i * i <= n; i++) {
    if (n % i == 0) {
      deg = 0;
      while (n % i == 0) deg++, n /= i;
      p.emplace_back(i, deg);
      mx = max(mx, deg);
    }
  }
  if (n != 1) p.emplace_back(n % Inf, 1);
  int ans = 1, i, j, dp[k + 1][mx + 1], ans_p;
  for (auto &it : p) {
    for (j = 0; j < it.second; j++) dp[0][j] = 0;
    dp[0][it.second] = 1;
    for (i = 1; i <= k; i++) {
      dp[i][it.second] = Mul(dp[i - 1][it.second], inv(it.second + 1));
      for (j = it.second - 1; j >= 0; j--)
        dp[i][j] = Sum(dp[i][j + 1], Mul(dp[i - 1][j], inv(j + 1)));
    }
    ans_p = 0;
    int cur = 1;
    for (j = 0; j <= it.second; j++) {
      ans_p = Sum(ans_p, Mul(dp[k][j], cur));
      cur = Mul(cur, it.first);
    }
    ans = Mul(ans, ans_p);
  }
  cout << ans;
}
