#include <bits/stdc++.h>
using namespace std;
long long mod = 1000000007;
long long pw(long long b, long long k) {
  long long ans = 1;
  long long p2 = b % mod;
  while (k) {
    if (k % 2) {
      ans *= p2;
      ans %= mod;
    }
    p2 *= p2;
    p2 %= mod;
    k /= 2;
  }
  return ans;
}
long long inv(long long a) { return pw(a, mod - 2); }
vector<long long> primes;
long long dp[10010][50];
long long n, k;
int main() {
  cin >> n >> k;
  vector<int> exp;
  long long nn = n;
  for (long long i = 2; i * i <= n; i++) {
    if (n % i == 0) {
      primes.push_back(i);
      int h = 0;
      while (n % i == 0) {
        n /= i;
        h++;
      }
      exp.push_back(h);
    }
  }
  if (n > 1) {
    primes.push_back(n);
    exp.push_back(1);
  }
  long long sol = 1;
  for (int uu = 0; uu < primes.size(); uu++) {
    for (int i = 0; i <= k; i++) {
      for (int j = 0; j < 50; j++) {
        dp[i][j] = 0;
      }
    }
    long long hh = 1;
    for (int i = 0; i < 50; i++) {
      dp[0][i] = hh;
      hh *= primes[uu];
      hh %= mod;
    }
    for (int i = 1; i <= k; i++) {
      dp[i][0] = 1;
      long long sm = 1;
      for (int j = 1; j <= exp[uu]; j++) {
        sm += dp[i - 1][j];
        dp[i][j] = (sm * inv(j + 1)) % mod;
        sm %= mod;
      }
    }
    sol *= dp[k][exp[uu]];
    sol %= mod;
  }
  cout << sol << endl;
}
