n,m=map(int,input().split()) F=[] x=m for i in range(2,10**6): if x%i==0: sc=0 while x%i==0: x//=i sc+=1 F.append((i,sc)) if x!=1: F.append((x,1)) A=[] for f,sc in F: s=0 now=n while now!=0: now//=f s+=now A.append(s//sc) a=min(A) if n<=100: ANS=1 for i in range(1,n+1): ANS*=i ANS//=(m**a) #print(ANS) S=str(ANS) S=S[0]+"."+S[1:] print(S,end="") print("e",end="") print(len(S)-2) else: from math import pi,e,sqrt,log10 ANS=log10(2*pi*n)/2+n*log10(n/e)+log10(1+1/(12*n)) - a* log10(m) u=int(ANS) ANS-=u S=10**ANS print(S,end="") print("e",end="") print(u)