#include #include #include #include #include #include #include #include using namespace std; #define x first #define y second #define MOD 666013 #define NMAX 100005 int n,m; int fact[NMAX]; int rid_log(int val, int put){ if(!put) return 1; int val2 = rid_log(val, put / 2); if(put&1) return (long long) val2 * val2 % MOD * val % MOD; return (long long)val2 * val2 % MOD; } int comb(int n, int k){ return (long long)fact[n] * rid_log(fact[k], MOD - 2) % MOD * rid_log(fact[n - k], MOD - 2) % MOD; } int main (){ scanf("%d%d",&n,&m); if(n < m){ printf("0\n"); return 0; } fact[0] = 1; for(int i = 1; i <= max(n,m); i++) fact[i] = (long long)fact[i - 1] * i % MOD; int answer = 0, sign; for(int i = m; i >= 1; i--){ int val = rid_log(i, n); if((i&1) == (n&1)) sign = 1; else sign = -1; answer += (long long)sign * val * comb(m,i) % MOD; if(answer < 0) answer += MOD; } printf("%d\n", (long long)answer * fact[m - 1] % MOD); return 0; }