#include <bits/stdc++.h>
using namespace std;
inline int toInt(string s) {
  int v;
  istringstream sin(s);
  sin >> v;
  return v;
}
template <class T>
inline string toString(T x) {
  ostringstream sout;
  sout << x;
  return sout.str();
}
const long long MOD = 1000000007;
long long inv[105];
vector<vector<long long>> matmul(vector<vector<long long>> a,
                                 vector<vector<long long>> b) {
  int n = a.size();
  vector<vector<long long>> ret =
      vector<vector<long long>>(n, vector<long long>(n, 0));
  for (int i = 0; i < (int)n; ++i)
    for (int j = 0; j < (int)n; ++j)
      for (int k = 0; k < (int)n; ++k)
        ret[i][j] = (ret[i][j] + a[i][k] * b[k][j]) % MOD;
  return ret;
}
vector<long long> matvecmul(vector<vector<long long>> a, vector<long long> b) {
  int n = a.size();
  auto ret = vector<long long>(n, 0);
  for (int i = 0; i < (int)n; ++i)
    for (int k = 0; k < (int)n; ++k) ret[i] = (ret[i] + a[i][k] * b[k]) % MOD;
  return ret;
}
vector<vector<long long>> matpow(vector<vector<long long>> a, long long p) {
  vector<vector<long long>> tmp = a;
  int n = a.size();
  vector<vector<long long>> ret =
      vector<vector<long long>>(n, vector<long long>(n, 0LL));
  for (int i = 0; i < (int)n; ++i) ret[i][i] = 1LL;
  while (p) {
    if (p & 1) ret = matmul(ret, tmp);
    tmp = matmul(tmp, tmp);
    p >>= 1;
  }
  return ret;
}
vector<pair<long long, int>> f(long long n) {
  vector<pair<long long, int>> ret;
  for (long long i = 2; i * i <= n; i++) {
    int cnt = 0;
    while (n % i == 0) {
      cnt++;
      n /= i;
    }
    if (cnt != 0) ret.push_back(make_pair(i, cnt));
  }
  if (n != 1) ret.push_back(make_pair(n, 1));
  return ret;
}
void init() {
  inv[1] = 1LL;
  for (int i = 2; i < 100; i++) {
    inv[i] = MOD - inv[MOD % i] * (MOD / i) % MOD;
  }
}
int main() {
  long long n, k;
  init();
  cin >> n >> k;
  vector<vector<long long>> mat(51, vector<long long>(51, 0));
  for (int i = 0; i < (int)51; ++i) {
    for (int j = i; j < (int)51; ++j) {
      mat[i][j] = inv[j + 1];
    }
  }
  mat = matpow(mat, k);
  auto ff = f(n);
  long long ret = 1;
  for (auto fc : ff) {
    long long ex = 0;
    long long p = 1;
    vector<long long> vec(51, 0);
    vec[fc.second] = 1LL;
    vec = matvecmul(mat, vec);
    for (int i = 0; i < (int)fc.second + 1; ++i) {
      ex = (ex + (p * vec[i]) % MOD) % MOD;
      p = (p * fc.first) % MOD;
    }
    ret = (ret * ex) % MOD;
  }
  cout << ret << endl;
  return 0;
}
