############################################################### #https://atcoder.jp/contests/abc249/submissions/71937223 import math def smallest_prime_facror(n): res=list(range(n+1)) for i in range(2,int(math.isqrt(n))+1): if res[i]==i: for j in range(i*i,n+1,i): if res[j]==j: res[j]=i return res spf=smallest_prime_facror(3000000) def prime_factorization(n): factors={} current=n while current>1: factors[spf[current]]=factors.get(spf[current],0)+1 current//=spf[current] return factors def divisors(n): factors=prime_factorization(n) divs=[1] for p,e in factors.items(): m=len(divs) mul=1 for _ in range(e): mul*=p for i in range(m): divs.append(divs[i]*mul) return divs ############################################################### N,K=map(int,input().split()) od=[N] vis=set() vis.add(N) mod=100003 while True: n=od[-1] F=prime_factorization(n) res=1 for p,e in F.items(): res*=(p**(e+1)-1)//(p-1) res%=mod od.append(res) if res in vis: loop=od.index(res) od.pop() break vis.add(res) if K<=len(od): print(od[K-1]) exit() K-=loop leng=len(od)-loop K%=leng print(od[loop+K])