MOD = 10**9 + 7 def factor(n): factors = {} while n % 2 == 0: factors[2] = factors.get(2, 0) + 1 n = n // 2 i = 3 while i * i <= n: while n % i == 0: factors[i] = factors.get(i, 0) + 1 n = n // i i += 2 if n > 1: factors[n] = 1 return factors def main(): N, K = map(int, input().split()) if N == 1: print(1) return factors = factor(N) if not factors: print(1) return max_a = max(factors.values()) # Precompute factorial and inverse factorial up to max_a fact = [1] * (max_a + 1) for i in range(1, max_a + 1): fact[i] = fact[i-1] * i % MOD inv_fact = [1] * (max_a + 1) inv_fact[max_a] = pow(fact[max_a], MOD-2, MOD) for i in range(max_a -1, -1, -1): inv_fact[i] = inv_fact[i+1] * (i+1) % MOD ans = 1 for p, a in factors.items(): m = K + a r = m % MOD if r < a: ans = 0 break # Compute product (r)*(r-1)* ... * (r -a +1) product = 1 for i in range(a): product = product * (r - i) % MOD contribution = product * inv_fact[a] % MOD ans = ans * contribution % MOD print(ans) if __name__ == '__main__': main()