import math def prime_factors(m): factors = {} while m % 2 == 0: factors[2] = factors.get(2, 0) + 1 m = m // 2 i = 3 while i * i <= m: while m % i == 0: factors[i] = factors.get(i, 0) + 1 m = m // i i += 2 if m > 1: factors[m] = 1 return factors def compute_k(n, factors): k = float('inf') for p, exp in factors.items(): v = 0 current = p while current <= n: v += n // current current *= p temp_k = v // exp if temp_k < k: k = temp_k return k def main(): import sys input_line = sys.stdin.readline().strip() n, m = map(int, input_line.split()) factors = prime_factors(m) if not factors: print("1e0") return k = compute_k(n, factors) try: log_nfact = math.lgamma(n + 1) / math.log(10) except OverflowError: log_nfact = float('inf') log_m = math.log10(m) log_val = log_nfact - k * log_m if log_val < 0: d = 0 p_val = 0.0 else: d = int(log_val) f = log_val - d p_val = 10 ** f p_rounded = round(p_val, 2) if p_rounded >= 10.0: d += 1 p_rounded = 1.0 elif p_rounded < 1.0 and p_val != 0.0: d -= 1 p_rounded = round(10 ** (f + 1), 2) if p_rounded >= 10.0: d += 1 p_rounded = 1.0 if p_rounded == int(p_rounded): part = f"{int(p_rounded)}e{d}" else: formatted = "{0:.2f}".format(p_rounded).rstrip('0').rstrip('.') part = f"{formatted}e{d}" print(part) if __name__ == "__main__": main()