#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using ll=long long; #include using mint=atcoder::modint998244353; ostream& operator<<(ostream& os,const mint& x){ os<>(istream& is,mint& x){ int t; is>>t; x=t; return is; } template ostream& operator<<(ostream& os,const pair& p); template istream& operator>>(istream& is,pair& p); template ostream& operator<<(ostream& os,const array& arr); template istream& operator>>(istream& is,array& arr); template ostream& operator<<(ostream& os,const vector& vec); template istream& operator>>(istream& is,vector& vec); template ostream& operator<<(ostream& os,const pair& p){ os< istream& operator>>(istream& is,pair& p){ is>>p.first>>p.second; return is; } template ostream& operator<<(ostream& os,const array& arr){ for(int i=0;i istream& operator>>(istream& is,array& arr){ for(int i=0;i>arr[i]; return is; } template ostream& operator<<(ostream& os,const vector& vec){ for(int i=0;i istream& operator>>(istream& is,vector& vec){ for(int i=0;i>vec[i]; return is; } template void input_vec(Vecs&... vs) { const auto n = get<0>(tie(vs...)).size(); for (size_t i = 0; i < n; ++i) ((cin >> vs[i]), ...); } template vector make_unique(vector vec){ ranges::sort(vec); vec.erase(unique(vec.begin(),vec.end()),vec.end()); return vec; } template pair,vector> make_rank(const vector& vec, Comp comp = {}, Proj proj = {}) { int n = vec.size(); vector argsort(n); iota(argsort.begin(), argsort.end(), 0); ranges::stable_sort(argsort, comp, [&](int i) -> decltype(auto) { return invoke(proj, vec[i]); }); vector rank(n); for(int i=0;i; using vvl=vector>; using vvvl=vector>>; using vi=vector; using vvi=vector>; using vvvi=vector>>; pair,vector> linear_sieve(int n){ vector primes,lpf(n+1,-1); for(ll i=2;i<=n;i++){ if(lpf[i]==-1){ lpf[i]=i; primes.push_back(i); } for(ll p:primes){ if(lpf[i]n)break; lpf[p*i]=p; } } return make_pair(primes,lpf); } int main(){ cin.tie(nullptr); ios::sync_with_stdio(false); cout<>n; ll mod=100003; ll m=max(n,mod); auto[primes,lpf]=linear_sieve(m+1); vl a(m+1); for(ll i=1;i<=m;i++){ ll x=i; a[i]=1; while(x>1){ ll s=1; ll p=lpf[x]; ll t=1; while(x%p==0){ x/=p; t*=p; s+=t; } a[i]=a[i]*s%mod; } } ll k; cin>>k; ll ans=n; k--; while(k>0){ if(k&1){ ans=a[ans]; } vl na(m+1); for(ll i=1;i<=m;i++)na[i]=a[a[i]]; a=move(na); k>>=1; } cout<