#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
const int maxn = 1e5 + 10;
void acc_ios() {
  ios::sync_with_stdio(false);
  cin.tie(0);
}
struct node {
  int next, to;
  long long val;
};
int a[maxn];
int inv[maxn];
long long dp[10100][70];
long long n, m;
void init() {
  inv[1] = 1;
  for (int i = 2; i < maxn; i++) inv[i] = (mod - mod / i) * inv[mod % i] % mod;
}
long long solve(long long x, int y) {
  memset(dp, 0, sizeof(dp));
  dp[0][y] = 1;
  for (int i = 0; i < m; i++) {
    for (int j = 0; j <= y; j++) {
      if (dp[i][j]) {
        for (int k = 0; k <= j; k++) {
          dp[i + 1][k] = (dp[i + 1][k] + dp[i][j] * inv[j + 1]) % mod;
        }
      }
    }
  }
  long long now = 1, sum = 0;
  for (int i = 0; i <= y; i++) {
    sum = (sum + now * dp[m][i]) % mod;
    now = now * x % mod;
  }
  return sum;
}
int main() {
  acc_ios();
  cin >> n >> m;
  long long ans = 1;
  init();
  for (long long i = 2; i <= sqrt(n); i++) {
    if (n % i == 0) {
      int cnt = 0;
      while (n % i == 0) {
        cnt++;
        n /= i;
      }
      ans *= solve(i, cnt);
      ans %= mod;
    }
  }
  if (n > 1) {
    ans *= solve(n, 1);
    ans %= mod;
  }
  cout << ans << endl;
  return 0;
}
