#include <bits/stdc++.h>
using namespace std;
const int K = 10006, C = 56, P = 1000000007;
long long n, f[K][C], inv[C];
int k;
vector<pair<long long, int> > d;
void divide(long long n) {
  for (long long i = 2; i <= sqrt(n); i++)
    if (n % i == 0) {
      int c = 0;
      while (n % i == 0) {
        n /= i;
        ++c;
      }
      d.push_back(make_pair(i, c));
    }
  if (n > 1ll) d.push_back(make_pair(n, 1));
}
long long work(long long p, int c) {
  for (int i = 0; i <= k; i++)
    for (int j = 0; j <= c; j++) f[i][j] = 0;
  f[0][c] = 1;
  for (int i = 1; i <= k; i++)
    for (int j = c; j >= 0; j--)
      for (int t = j; t <= c; t++)
        f[i][j] = (f[i][j] + f[i - 1][t] * inv[t + 1] % P) % P;
  long long ans = 0, now = 1;
  for (int j = 0; j <= c; j++) {
    ans = (ans + f[k][j] * now % P) % P;
    now = now * p % P;
  }
  return ans;
}
int main() {
  inv[1] = 1;
  for (int i = 2; i < C; i++) inv[i] = -(P / i) * inv[P % i] % P;
  cin >> n >> k;
  divide(n);
  long long ans = 1;
  for (unsigned int i = 0; i < d.size(); i++)
    ans = ans * work(d[i].first, d[i].second) % P;
  cout << (ans + P) % P << endl;
  return 0;
}
