#include <bits/stdc++.h>
using namespace std;
const long long M = 1e9 + 7;
long long A[200], B[200];
long long Pow(long long x, long long y) {
  long long ans = 1;
  for (; y; y >>= 1) {
    if (y % 2 == 1) ans = ans * x % M;
    x = x * x % M;
  }
  return ans;
}
int main() {
  long long n, k;
  cin >> n >> k;
  long long ans = 1;
  for (long long i = 2; i * i <= n; ++i) {
    int now = 0;
    while (n % i == 0) {
      n /= i;
      ++now;
    }
    if (now > 0) {
      for (int j = 0; j <= now; ++j) A[j] = 1, B[j] = now + 1;
      for (int j = 2; j <= k; ++j) {
        B[now] = B[now] * (now + 1) % M;
        long long a = A[now], b = B[now];
        for (int ii = now - 1; ii >= 0; --ii) {
          long long c = a, d = b;
          B[ii] = B[ii] * (ii + 1) % M;
          a = a * B[ii] % M;
          a = (a + (A[ii] * b) % M) % M;
          b = b * B[ii] % M;
          A[ii] = A[ii] * d % M;
          A[ii] = (A[ii] + (c * B[ii] % M)) % M;
          B[ii] = B[ii] * d % M;
        }
      }
      for (int j = 0; j <= now; ++j) A[j] = A[j] * Pow(i, j) % M;
      for (int j = 1; j <= now; ++j) {
        A[j - 1] = A[j - 1] * B[j] % M;
        A[j] = A[j] * B[j - 1] % M;
        B[j] = B[j] * B[j - 1] % M;
        A[j] = (A[j] + A[j - 1]) % M;
      }
      ans = ans * A[now] % M * Pow(B[now], M - 2) % M;
    }
  }
  if (n > 1) {
    long long now = 1;
    for (int j = 0; j <= now; ++j) A[j] = 1, B[j] = (now + 1);
    for (int j = 2; j <= k; ++j) {
      B[now] = B[now] * (now + 1) % M;
      long long a = A[now], b = B[now];
      for (int ii = now - 1; ii >= 0; --ii) {
        long long c = a, d = b;
        B[ii] = B[ii] * (ii + 1) % M;
        a = a * B[ii] % M;
        a = (a + (A[ii] * b) % M) % M;
        b = b * B[ii] % M;
        A[ii] = A[ii] * d % M;
        A[ii] = (A[ii] + (c * B[ii] % M)) % M;
        B[ii] = B[ii] * d % M;
      }
    }
    for (int j = 0; j <= now; ++j) A[j] = A[j] * Pow(n, j) % M;
    for (int j = 1; j <= now; ++j) {
      A[j - 1] = A[j - 1] * B[j] % M;
      A[j] = A[j] * B[j - 1] % M;
      B[j] = B[j] * B[j - 1] % M;
      A[j] = (A[j] + A[j - 1]) % M;
    }
    ans = ans * A[now] % M * Pow(B[now], M - 2) % M;
  }
  cout << ans << endl;
}
