#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-9;
const int oo = 0x3f3f3f3f;
const long long mod = 1000000007;
map<long long, long long> fak(long long n) {
  map<long long, long long> F;
  for (long long i = 2; i * i <= n; ++i) {
    while (n % i == 0) {
      F[i]++;
      n /= i;
    }
  }
  if (n > 1) F[n]++;
  return F;
}
long long modpow(long long a, long long n) {
  long long b = 1;
  while (n) {
    if (n & 1) b = a * b % mod;
    a = a * a % mod;
    n >>= 1;
  }
  return b;
}
long long inverse(long long a) { return modpow(a, mod - 2); }
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  long long n;
  int k;
  cin >> n >> k;
  auto F = fak(n);
  vector<long long> inv(70);
  for (int i = 1; i < 70; ++i) {
    inv[i] = inverse(i);
  }
  vector<vector<long long>> M(70);
  for (auto f : F) {
    int s = f.second + 1;
    if (!M[s].empty()) continue;
    M[s] = vector<long long>(s);
    M[s].back() = 1;
    for (int i = 0; i < k; ++i) {
      for (int j = 0; j < s; ++j) {
        M[s][j] = M[s][j] * inv[j + 1] % mod;
        for (int t = j + 1; t < s; ++t) {
          M[s][j] += M[s][t] * inv[t + 1] % mod;
          if (M[s][j] >= mod) M[s][j] -= mod;
        }
      }
    }
  }
  long long answer = 0;
  vector<pair<long long, long long>> faks;
  for (auto p : F) faks.push_back(p);
  function<void(int, long long, long long)> go = [&](int pnt, long long prob,
                                                     long long num) {
    if (pnt == F.size()) {
      answer += prob * num % mod;
      if (answer >= mod) answer -= mod;
    } else {
      long long s = faks[pnt].second;
      long long cur = 1;
      for (int i = 0; i <= s; ++i) {
        go(pnt + 1, prob * M[s + 1][i] % mod, num * cur % mod);
        cur *= faks[pnt].first % mod;
      }
    }
  };
  go(0, 1, 1);
  cout << answer << '\n';
  return 0;
}
