#include <iostream>
#include <cstdio>
#define MOD 9901
using namespace std;
FILE *f, *g;
long long a, b;
long long k;
bool p[7101];
long long pr[1001];
void readFile()
{
f = fopen("sumdiv.in", "r");
fscanf(f, "%lld%lld", &a, &b);
fclose(f);
}
void ciur()
{
long long n = 7100;
long long i, j;
p[0] = p[1] = 1;
for(i = 4; i <= n; i += 2)
p[i] = 1;
for(i = 3; i * i<= n; i += 2)
{
if(p[i] == 0)
{
for(j = i * i; j <= n; j += i * 2)
p[j] = 1;
}
}
pr[++ k] = 2;
for(i = 3; i <= n; i += 2)
{
if(p[i] == 0)
pr[++ k] = i;
}
}
long long putere(long long a, long long b)
{
long long p = 1, i;
long long c = a;
for(i = 0; (1 << i) <= b; i ++)
{
if(((1 << i) & b) > 0)
{
p = (p * c) % MOD;
}
c *= c;
c %= MOD;
}
return p;
}
void euclid(long long a, long long b, long long &x, long long &y, long long &d)
{
if(b == 0)
{
d = a;
x = 1;
y = 0;
return;
}
long long xx, yy, q = a / b;
euclid(b, a % b, xx, yy, d);
x = yy;
y = xx - yy * q;
}
long long s = 1;
void poz(long long &a, long long n)
{
if(a < 0)
{
a = n + a % n;
}
}
void solve()
{
ciur();
long long d, i, j, rez, p, y;
d = 1;
while(d <= k && pr[d] * pr[d] <= a)
{
p = 0;
while(a % pr[d] == 0)
{
a /= pr[d];
p ++;
}
if(p != 0)
{
p *= b;
// printf("p = %lld d = %lld\n", p, pr[d]);
s *= (putere(pr[d], p + 1) - 1);
s %= MOD;
// printf("%d\n", s);
y = pr[d] - 1;
euclid(y, MOD, rez, i, j);
rez %= MOD;
poz(rez, MOD);
s *= rez;
s %= MOD;
//printf("%d\n", s);
}
d ++;
}
if(a > 1)
{
if(a != MOD)
{
// printf("%d\n", s);
s *= (putere(a, b + 1) - 1);
// printf("*%d %lld\n", a, putere(a, b + 1));
s %= MOD;
// printf("%d\n", s);
y = a - 1;
euclid(y, MOD, rez, i, j);
rez %= MOD;
// printf("%d\n", rez);
poz(rez, MOD);
s *= rez;
s %= MOD;
}
}
}
void printFile()
{
g = fopen("sumdiv.out", "w");
fprintf(g, "%lld\n", s);
fclose(g);
}
int main()
{
readFile();
solve();
printFile();
return 0;
}