#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
const int MMAX = 1e4 + 7;
const int MAXDEG = 55;
long long v[MAXDEG][MMAX];
vector<long long int> revs = {0};
void rev_begin() {
  vector<long long int> y;
  long long t = MOD - 2;
  while (t > 0) {
    y.push_back(t % 2);
    t /= 2;
  }
  for (int i = 1; i < MAXDEG; i++) {
    vector<long long int> a;
    long long s = i;
    for (int j = 0; j < 100; j++) {
      a.push_back(s % MOD);
      s = s * s;
      s %= MOD;
    }
    long long ansy = 1;
    for (int j = 0; j < y.size(); j++) {
      if (y[j] == 1) {
        ansy *= a[j];
        ansy %= MOD;
      }
    }
    revs.push_back(ansy);
  }
}
void clr() {
  for (int i = 0; i < MMAX; i++)
    for (int j = 0; j < MAXDEG; j++) v[j][i] = 0;
}
void show() {
  for (int i = 0; i < 10; i++) {
    for (int j = 0; j < 5; j++) {
      cout << v[i][j] << " ";
    }
    cout << endl;
  }
}
void doit(long long int u, int alpha) {
  clr();
  long long p = 1;
  for (int j = 0; j < alpha + 1; j++) {
    v[j][0] = p % MOD;
    p *= u;
    p %= MOD;
  }
  for (int i = 1; i < MMAX; i++) {
    for (int j = 0; j < alpha + 1; j++) {
      for (int l = 0; l <= j; l++) {
        v[j][i] += (v[l][i - 1] * revs[j + 1]) % MOD;
        v[j][i] %= MOD;
      }
    }
  }
}
int main() {
  long long n, k;
  rev_begin();
  cin >> n >> k;
  long long ans = 1;
  long long t = 2;
  while (t * t <= n) {
    while (t * t <= n && n % t != 0) t++;
    if (n % t == 0) {
      int alpha = 0;
      while (n % t == 0) {
        alpha++;
        n /= t;
      }
      doit(t, alpha);
      ans *= v[alpha][k];
      ans %= MOD;
    }
  }
  if (n > 1) {
    t = n;
    doit(t, 1);
    ans *= v[1][k];
    ans %= MOD;
  }
  cout << ans;
  return 0;
}
