/*
    给出A,B求A^B内的所有约数之和   mod 9901
    约数之和,有公式 (p1^0 +  + p1^n1)**(pk^0 +  + pk^nk)
    用等比数列求和公式 (p^(n+1)-1)/(p-1)
    这里有1/(p-1),需要求(p-1)关于mod的逆元
    但是,
    求逆元是有条件的 ax = 1 mod m    存在逆元a^-1 需要 gcd(a,m)  = 1

    如果不满足,可用公式 a/b%m = a%(bm)/b
    这个公式是没条件的,当然b|a
    不过当心bm在ipow那里,最大有bm*bm会溢出
    不过这题,刚好对于(p-1)%m==0的那些数据,不会导致溢出
    
    另外一种做法就是二分了
    对每个1 +p+..+p^n 
    n为奇数 : (1++p^n/2) + p^(n/2+1)(1++p^n/2)
    n为偶数 : (1++p^n/2) + p^n/2(p++p^n/2)
    注意维护p
*/

#include
<iostream>
#include
<cstring>
#include
<map>
#include
<algorithm>
#include
<stack>
#include
<queue>
#include
<cmath>
#include
<string>
#include
<cstdlib>
#include
<vector>
#include
<cstdio>
#include
<set>
#include
<list>
#include
<numeric>
#include
<cassert>
#include
<ctime>

using namespace std;

const long long MOD = 9901;

long long ipow(long long a, long long n, long long MOD){
    
if(n == 0){
        
return 1;
    }

    
if(n == 1){
        
return a % MOD;
    }

    
long long ans = ipow(a, n/2, MOD);
    ans 
= ans * ans % MOD;
    
if(n & 1 ){
        ans 
= ans * a % MOD;
    }

    
return ans;
}


//ax + ny = d
long long ExtendEuclid(long long a, long long n, long long &x , long long &y){//ax = b mod n
    if(n == 0){
        x 
= 1;
        y 
= 0;
        
return a;
    }
else{
        
//  nx' + a%ny'
        
//= nx' + (a - a/n*n)y'
        
//= ay' + n(x'-a/ny')
        
//=ax + ny
        long long _x, _y, d = ExtendEuclid(n, a % n, _x, _y);
        x 
= _y;
        y 
= _x - a/n*_y;
        
return d;
    }

}


long long inv(long long a , long long n){//普通逆元求法   ax+ny = 1
    long long x,y;
    ExtendEuclid(a,n,x,y);
    
return x % n;
}


long long inv2(long long a, long long n){//x关于素数p的逆元为 x^(p-2) mod p    注意 gcd(x,p) = 1!!!
    return ipow(a,n-2,n);
}

 

long long solve(long long p , long long n){//p^0 +  + p^n
    long long mod = MOD;
    
//ax = 1 mod m 。a有逆元的条件是gcd(a,n) = 1 !!!! 否则无解,不能用ExtendEuclid
    
//a/b%m = a%(bm)/b  这道题刚好mod = bm,在上面做乘法时不会溢出
    if((p-1% mod == 0){
        mod 
*= p-1;
        
return (ipow(p,n+1,mod)-1/ (p-1);
    }
else{
        
//虽然公式a/b%m = a%(bm)/b 在这里也可以用的,但是某些数据,导致ipow那里溢出
        
//用逆元就没事
        return (ipow(p,n+1, MOD)-1* inv(p-1, MOD) % MOD;
    }

}


long long cal(long long a, long long n, long long &p){//a^0+..+a^n  , p = a^n
    if(n == 0){
        p 
= 1;
        
return 1;
    }

    
if(n == 1){
        p 
= a % MOD;
        
return (1 + a) % MOD;
    }

    
long long ans = cal(a, n/2, p);
    
//注意别忘记维护p了
    if(n&1){
        ans 
= ans * (1 + p*a) % MOD;
        p 
= p * p * a % MOD;
        
return ans;
    }
else {
        ans 
= (ans + (ans- 1* p % MOD) % MOD;
         p 
= p * p % MOD;
        
return ans;
    }

}


int main()
{
#ifndef ONLINE_JUDGE
    
//freopen("in","r",stdin);
#endif

    
for(long long a , b ; ~scanf("%lld%lld"&a, &b); ){
        
if(a == 0){
            printf(
"0\n");
            
continue;
        }

        
long long ans = 1;
        
for(long long p = 2 ; p*<= a ; p++){
            
if(a % p == 0){
                
long long cnt = 0;
                
while(a % p == 0){
                    a 
/=p;
                    cnt
++;
                }

                cnt 
*= b;
                ans 
= ans * solve(p ,cnt) % MOD;
            }

        }

        
if(a > 1){
            ans 
= ans * solve(a, b) % MOD;
        }

        printf(
"%lld\n", (ans+MOD)%MOD);
    }

    
return 0;
}