#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-9;
const double pi = acos(-1.0);
const double dinf = 1e250;
const long long INF = (long long)(2e18);
const long long inf = (long long)(1e9 + 7);
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
template <class T>
void OUT(T a) {
  cout << a;
  exit(0);
}
template <class T1, class T2>
inline T1& maxeq(T1& a, T2 b) {
  return a = max(a, b);
}
template <class T1, class T2>
inline T1& mineq(T1& a, T2 b) {
  return a = min(a, b);
}
mt19937 rng((uint32_t)(chrono::steady_clock::now().time_since_epoch().count()));
chrono::time_point<chrono::steady_clock> cl;
double current_time() {
  return (chrono::steady_clock::now() - cl).count() / 1e9;
}
long long binpow(long long a, long long p) {
  long long res = 1;
  for (; p; p >>= 1) {
    if (p & 1) res *= a;
    res %= inf;
    a *= a;
    a %= inf;
  }
  return res;
}
long long n, k;
long long nnum = 0;
long long ndels = 1;
map<long long, long long> dels;
int32_t main() {
  ios_base::sync_with_stdio(0);
  cout << fixed << setprecision(10);
  cl = chrono::steady_clock::now();
  cin.tie(0);
  cin >> n >> k;
  long long nn = n;
  for (long long i = 2; i * i <= nn; ++i)
    while (n % i == 0) {
      dels[i]++;
      n /= i;
    }
  if (n > 1) dels[n]++;
  for (auto& it : dels) {
    ndels *= (it.second + 1);
    ndels %= inf;
  }
  long long res = 1;
  for (auto& it : dels) {
    vector<vector<long long> > dp(k + 1, vector<long long>(it.second + 1, 0));
    dp[0][it.second] = 1;
    for (long long curk = 0; curk < k; ++curk) {
      for (long long curnum = 0; curnum <= it.second; ++curnum) {
        long long den = binpow(curnum + 1, inf - 2);
        for (long long i = 0; i <= curnum; ++i) {
          dp[curk + 1][i] += dp[curk][curnum] * den % inf;
          dp[curk + 1][i] %= inf;
        }
      }
    }
    long long curres = 0;
    for (long long i = 0; i <= it.second; ++i) {
      curres += dp[k][i] * binpow(it.first, i);
      curres %= inf;
    }
    res *= curres;
    res %= inf;
  }
  cout << res;
  return 0;
}
