#include <bits/stdc++.h>
using namespace std;
long long dp[10005][52], MOD = 1e9 + 7, n, inv[54];
int k;
vector<int> snt;
long long mu(long long u, int c) {
  if (c == 0) return 1ll;
  if (c == 1) return 1ll * u;
  long long m = mu(u, c / 2);
  if (c % 2 == 0)
    return (1ll * m * m) % MOD;
  else
    return (1ll * ((1ll * m * m) % MOD) * u) % MOD;
}
void init() {
  inv[0] = inv[1] = 1;
  for (int i = 2; i <= 52; i++) inv[i] = mu(i, MOD - 2);
}
long long get(long long u, int c) {
  u = u % MOD;
  memset(dp, 0, sizeof(dp));
  dp[0][c] = 1;
  for (int i = 1; i <= k; i++) {
    for (int j = c; j >= 0; j--) {
      dp[i][j] = (dp[i][j + 1] + (dp[i - 1][j] * inv[j + 1]) % MOD) % MOD;
    }
  }
  long long ans = 0, sum = 0;
  for (int j = 0; j <= c; j++) {
    sum = (sum + dp[k][j]) % MOD;
    ans = (ans + (1ll * dp[k][j] * mu(u, j)) % MOD) % MOD;
  }
  return ans * mu(sum, MOD - 2);
}
void solve() {}
int main() {
  cin >> n >> k;
  init();
  solve();
  long long ans = 1;
  if (n % 2 == 0) {
    int c = 0;
    while (n % 2 == 0) {
      ++c;
      n /= 2;
    }
    ans = (1ll * ans * get(2ll, c)) % MOD;
  }
  for (long long i = 3; 1ll * i * i <= n; i += 2) {
    if (n % i == 0) {
      int c = 0;
      while (n % i == 0) {
        ++c;
        n /= i;
      }
      ans = (1ll * ans * get(i, c)) % MOD;
    }
  }
  if (n > 1) ans = (1ll * ans * get(n, 1)) % MOD;
  cout << ans;
}
