#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline bool chkmin(T &a, const T &b) {
  return a > b ? a = b, 1 : 0;
}
template <typename T>
inline bool chkmax(T &a, const T &b) {
  return a < b ? a = b, 1 : 0;
}
template <typename T>
inline void Read(T &first) {
  char c = getchar();
  bool f = false;
  for (first = 0; !isdigit(c); c = getchar()) {
    if (c == '-') {
      f = true;
    }
  }
  for (; isdigit(c); c = getchar()) {
    first = first * 10 + c - '0';
  }
  if (f) {
    first = -first;
  }
}
const int INF = 0x3f3f3f3f;
const int MAX_N = 2e5 + 5;
const int MOD = 1e9 + 7;
inline void add(int &a, int b) {
  a += b;
  if (a > MOD) a -= MOD;
}
inline void sub(int &a, int b) {
  a -= b;
  if (a < 0) a += MOD;
}
inline int mul(int a, int b) { return (int)((long long)a * b % MOD); }
inline int power(int a, int b) {
  int res = 1;
  while (b > 0) {
    if (b & 1) {
      res = mul(res, a);
    }
    a = mul(a, a);
    b >>= 1;
  }
  return res;
}
inline int inv(int a) {
  a %= MOD;
  if (a < 0) a += MOD;
  int b = MOD, u = 0, v = 1;
  while (a) {
    int t = b / a;
    b -= t * a;
    swap(a, b);
    u -= t * v;
    swap(u, v);
  }
  if (u < 0) u += MOD;
  return u;
}
long long n;
int k;
const int MAX_K = 1e4 + 5;
int dp[MAX_K][55];
int main() {
  cin >> n >> k;
  vector<pair<long long, int>> f;
  for (long long p = 2; p * p <= n; p++) {
    if (n % p == 0) {
      int q = 0;
      while (n % p == 0) {
        n /= p;
        q++;
      }
      f.emplace_back(make_pair(p, q));
    }
  }
  if (n > 1) {
    f.emplace_back(make_pair(n, 1));
  }
  int ans = 1;
  for (auto &first : f) {
    long long p = first.first;
    int q = first.second;
    memset(dp, 0, sizeof(dp));
    dp[0][q] = 1;
    for (int i = 0; i < k; i++) {
      for (int j = 0; j <= q; j++) {
        int tmp = mul(dp[i][j], inv(j + 1));
        for (int t = 0; t <= j; t++) {
          add(dp[i + 1][t], tmp);
        }
      }
    }
    int num = 1, tmp = 0;
    for (int j = 0; j <= q; j++) {
      add(tmp, mul(num, dp[k][j]));
      num = mul(num, (int)(p % MOD));
    }
    ans = mul(ans, tmp);
  }
  cout << ans << '\n';
  return 0;
}
