#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
const long long INF = 1e9;
const long long LINF = INF * INF;
const int mod = 1e9 + 7;
inline int add(int x, int y) {
  if (x + y >= mod) return x + y - mod;
  return x + y;
}
inline int mult(int x, int y) { return x * (long long)y % mod; }
inline int power(int x, int y) {
  int r = 1;
  while (y) {
    if (y & 1) r = mult(r, x);
    x = mult(x, x);
    y >>= 1;
  }
  return r;
}
long long n, k;
const int N = 10000 + 7;
vector<int> prob[N];
int inv[N];
int get(long long p, int a) {
  for (int i = (0); i < (k + 1); ++i) prob[i].assign(a + 1, 0);
  prob[k][a] = 1;
  for (int i = (k + 1) - 1; i >= (1); --i)
    for (int j = (0); j < (a + 1); ++j)
      for (int z = (0); z < (j + 1); ++z)
        prob[i - 1][z] = add(prob[i - 1][z], mult(prob[i][j], inv[j + 1]));
  int res = 0;
  for (int i = (0); i < (a + 1); ++i)
    res = add(res, mult(prob[0][i], power(p % mod, i)));
  return res;
}
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  cin >> n >> k;
  int ans = 1;
  for (int i = (1); i < (N); ++i) inv[i] = power(i, mod - 2);
  for (long long i = 2; i * i <= n; ++i) {
    if (n % i) continue;
    int cnt = 0;
    while (n % i == 0) n /= i, cnt++;
    ans = mult(ans, get(i, cnt));
  }
  if (n > 1) ans = mult(ans, get(n, 1));
  cout << ans << endl;
  cerr << "Time elapsed: " << clock() / (double)CLOCKS_PER_SEC << endl;
  return 0;
}
