#include using namespace std; void fast_io() { ios_base::sync_with_stdio(false); cin.tie(nullptr); } #include using mint = atcoder::modint1000000007; long long pow_mod(long long a, long long b, long long mod) { long long res = 1; while (b > 0) { if (b & 1) { res = res * a % mod; } a = a * a % mod; b >>= 1; } return res; } int main() { fast_io(); int n; long long k; cin >> n >> k; map pf; for (int i = 2; i * i <= n; i++) { while (n % i == 0) { pf[i]++; n /= i; } } if (n > 1) { pf[n]++; } const long long MOD_POW = 1e9 + 6; while (k > 0 && pf.rbegin()->first > 3) { map pf_new; for (auto [pp, cnt] : pf) { int p = pp + 1; for (int i = 2; i * i <= p; i++) { while (p % i == 0) { pf_new[i] += cnt; pf_new[i] %= MOD_POW; p /= i; } } if (p > 1) { pf_new[p] += cnt; pf_new[p] %= MOD_POW; } } swap(pf, pf_new); k--; } if (k == 0) { mint ans = 1; for (auto [p, cnt] : pf) { ans *= mint(p).pow(cnt); } cout << ans.val() << endl; return 0; } long long cnt_2 = pf[2] * pow_mod(2, k / 2, MOD_POW); long long cnt_3 = pf[3] * pow_mod(3, k / 2, MOD_POW); if (k % 2) { swap(cnt_2, cnt_3); cnt_2 = (cnt_2 * 2) % MOD_POW; } mint ans = mint(2).pow(cnt_2) * mint(3).pow(cnt_3); cout << ans.val() << endl; }