#include using namespace std; const int nmax = 100005; const int mod = 666013; int n , m , dp[nmax] , i , answer , fact[nmax] , inv[nmax] , add; int fastpow(int x , int p) { int ret = 1; for (int i = 0 ; (1 << i) <= p ; ++i) { if ((1 << i) & p) ret = (1LL * ret * x) % mod; x = (1LL * x * x) % mod; } return ret; } int main() { //freopen("test.in" , "r" , stdin); //freopen("test.out" , "w" , stdout); cin >> n >> m; if (n < m) { cout << "0" << '\n'; return 0; } dp[1] = 0 , dp[2] = 1; for (i = 3 ; i <= m ; ++i) dp[i] = (1LL * (i - 1) * (dp[i - 1] + dp[i - 2])) % mod; fact[0] = 1; for (i = 1 ; i <= m ; ++i) fact[i] = (1LL * fact[i - 1] * i) % mod; inv[0] = 1; for (i = 1 ; i <= m ; ++i) inv[i] = (1LL * inv[i - 1] * fastpow(i , mod - 2)) % mod; for (i = 0 ; i <= m ; ++i) { add = (1LL * fact[m] * inv[i]) % mod; add = (1LL * add * inv[m - i]) % mod; add = (1LL * add * fastpow(m - i , n)) % mod; if (i % 2 == 0) answer = (answer + add) % mod; else answer = (answer - add + mod) % mod; } answer = (1LL * answer * dp[m]) % mod; cout << answer << '\n'; return 0; }