#include <bits/stdc++.h>
using namespace std;
const int mx = 1e4 + 10;
const int mod = 1e9 + 7;
long long n;
int m;
long long f[mx][100];
long long power(long long a, int k) {
  if (!k) return 1;
  if (k == 1) return a % mod;
  long long ans = power(a, k / 2);
  (ans *= ans) %= mod;
  if (k & 1) (ans *= a) %= mod;
  return ans;
}
long long p[mx], plen = 0, cnt[mx];
int sc = 0;
void divp() {
  long long x = n;
  for (long long i = 2; i * i <= x; i++) {
    if (x % i) continue;
    p[plen] = i;
    while (x % i == 0) x /= i, cnt[plen]++, sc++;
    plen++;
  }
  if (x == 1) return;
  p[plen] = x;
  cnt[plen]++;
  plen++;
}
int main() {
  scanf("%lld%d", &n, &m);
  divp();
  for (int i = 0; i < plen; i++) f[i][cnt[i]] = 1;
  while (m > 0) {
    for (int i = 0; i < plen; i++) {
      long long sum = 0;
      for (int j = cnt[i]; j >= 0; j--) {
        (sum += (power(j + 1, mod - 2) * f[i][j])) %= mod;
        f[i][j] = sum;
      }
    }
    m--;
  }
  long long ans = 1;
  for (int i = 0; i < plen; i++) {
    long long sum = 0;
    for (int j = 0; j <= cnt[i]; j++) {
      (sum += power(p[i], j) * f[i][j]) %= mod;
    }
    (ans *= sum) %= mod;
  }
  printf("%lld\n", ans);
  return 0;
}
