#include <bits/stdc++.h>
using namespace std;
long long int modpow(long long int a, long long int b) {
  if (b == 0) {
    return 1;
  }
  long long int ans = modpow(a, b / 2);
  ans = (ans * ans) % 1000000007;
  if (b % 2) {
    ans = (ans * a) % 1000000007;
  }
  return ans;
}
long long int en[10005][50];
long long int dn[10005][50];
long long int inver[1000];
pair<long long int, long long int> ad(pair<long long int, long long int> a,
                                      pair<long long int, long long int> b) {
  return {(a.first * b.second + b.first * a.second) % 1000000007,
          (a.second * b.second) % 1000000007};
}
pair<long long int, long long int> mult(pair<long long int, long long int> a,
                                        pair<long long int, long long int> b) {
  return {(a.first * b.first) % 1000000007, (a.second * b.second) % 1000000007};
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  long long int n, k;
  cin >> n >> k;
  map<long long int, int> div;
  for (int i = 1; i <= 1000; i++) {
    inver[i] = modpow(i, 1000000007 - 2);
  }
  for (long long int i = 2; i * i <= n; i++) {
    while (n % i == 0) {
      n /= i;
      div[i]++;
    }
  }
  if (n > 1) {
    div[n]++;
  }
  pair<long long int, long long int> ans = {1, 1};
  for (auto entr : div) {
    long long int pr = entr.first % 1000000007;
    long long int cn = entr.second;
    vector<pair<long long int, long long int> > prob(cn + 2, {0, 1});
    prob[cn] = {1, 1};
    for (int i = 0; i < k; i++) {
      vector<pair<long long int, long long int> > newprob(cn + 2, {0, 1});
      newprob[0] = prob[0];
      for (int i = 1; i <= cn; i++) {
        prob[i].second = (prob[i].second * (i + 1)) % 1000000007;
        for (int j = 0; j <= i; j++) {
          newprob[j] = ad(newprob[j], prob[i]);
        }
      }
      swap(newprob, prob);
    }
    pair<long long int, long long int> expec = {0, 1};
    pair<long long int, long long int> currval = {1, 1};
    for (int i = 0; i <= cn; i++) {
      expec = ad(expec, mult(currval, prob[i]));
      currval.first = (currval.first * pr) % 1000000007;
    }
    ans = mult(ans, expec);
  }
  cout << (ans.first * modpow(ans.second, 1000000007 - 2)) % 1000000007;
  return 0;
}
