program test
implicit none

integer(8) :: n,m,i,j,k,sosuu(32000)=1,temp,sosuu_list(32000)=0,soinsuu_list(32000)=0,count,rest,ans=1,value
integer(8) :: sosuu_list2(32000),soinsuu_list2(32000),count2,bits(32000)=0
read(*,*) n,m

! まず、Mを素因数分解をする
! 次に、N以上を満たす最小のMの約数を探しYとする
! 答えはM/Y

! 素数判定
sosuu(1)=0
do i=2,32000
	if(sosuu(i) == 0)then
		goto 100
	else
		temp = 2*i
		do while(temp <= 32000)
			sosuu(temp) = 0
			temp = temp + i
		enddo
	endif
	100 continue
enddo

! 素数リスト
count=0
do i=2,32000
	if(sosuu(i) == 1)then
		count = count + 1
		sosuu_list(count) = i
	endif
enddo

! 素因数分解をする
rest = m
do i=1,count
	do while(mod(rest,sosuu_list(i))==0)
		rest = rest/sosuu_list(i)
		soinsuu_list(i) = soinsuu_list(i) + 1
	enddo
enddo

count2=0
do i=1,count
	if(soinsuu_list(i) >= 1)then
		count2 = count2 + 1
		sosuu_list2(count2) = sosuu_list(i)
		soinsuu_list2(count2) = soinsuu_list(i)
	endif
enddo

! 最後に残ったrestが素数かもしれない
if(rest >= 2)then
	count2 = count2 + 1
	sosuu_list2(count2) = rest
	soinsuu_list2(count2) = 1
endif

write(*,*) ans

end program