#include <bits/stdc++.h>
using namespace std;
long long n, k;
vector<pair<long long, long long> > p;
long long ans = 1;
long long d[10005][60];
long long inv[60], jc[60], ny[60];
long long X, Y;
void exgcd(long long a, long long b) {
  if (b == 0) {
    X = 1, Y = 0;
    return;
  }
  exgcd(b, a % b);
  int t = X;
  X = Y, Y = t - a / b * Y;
}
void init() {
  jc[0] = 1, ny[0] = 1;
  for (int i = 1; i <= 55; i++) {
    jc[i] = jc[i - 1] * i % 1000000007;
  }
  exgcd(jc[55], 1000000007);
  ny[55] = (X % 1000000007 + 1000000007) % 1000000007;
  for (int i = 54; i > 0; i--) {
    ny[i] = ny[i + 1] * (i + 1) % 1000000007;
  }
  for (int i = 1; i <= 55; i++) {
    inv[i] = ny[i] * jc[i - 1] % 1000000007;
  }
}
int main() {
  cin >> n >> k;
  init();
  long long x = n, ct;
  for (long long i = 2; i * i <= x; i++) {
    ct = 0;
    while (x % i == 0) {
      x /= i;
      ct++;
    }
    if (ct) p.push_back(make_pair(i, ct));
  }
  if (x != 1) p.push_back(make_pair(x, 1));
  long long res, sq;
  for (int _ = 0; _ < p.size(); _++) {
    memset(d, 0, sizeof(d));
    d[0][p[_].second] = 1;
    for (int i = 1; i <= k; i++) {
      for (int j = p[_].second; j >= 0; j--) {
        d[i - 1][j] =
            (d[i - 1][j] * inv[j + 1] % 1000000007 + d[i - 1][j + 1]) %
            1000000007;
        d[i][j] = d[i - 1][j];
      }
    }
    res = 0, sq = 0;
    for (int j = 0; j <= p[_].second; j++) {
      if (sq == 0)
        sq = 1;
      else
        sq = sq * p[_].first % 1000000007;
      res = (res + d[k][j] * sq) % 1000000007;
    }
    ans = ans * res % 1000000007;
  }
  cout << ans;
}
