#include using namespace std; const int nMax = 1e5 + 2; const int mod = 666013; int n, m; int der[nMax]; void precalc() { der[0] = 1; der[1] = 0; der[2] = 1; for (int i = 3; i < nMax; ++i) { der[i] = (1LL * (i - 1) * (der[i - 1] + der[i - 2])) % mod; } } int put(int a, int b) { int res = 1; for (; b; b >>= 1) { if (b & 1) res = (1LL * res * a) % mod; a = (1LL * a * a) % mod; } return res; } int invers(int x) { return put(x, mod - 2); } int fact[nMax]; void pref() { fact[0] = 1; for (int i = 1; i < nMax; ++i) fact[i] = (1LL * fact[i - 1] * i) % mod; } int C(int nn, int k) { int ans = fact[nn]; ans = (1LL * ans * invers(fact[k])) % mod; ans = (1LL * ans * invers(fact[nn - k])) % mod; return ans; } int main() { #ifndef ONLINE_JUDGE freopen("cutit.in", "r", stdin); #endif // ONLINE_JUDGE ios::sync_with_stdio(0); cin >> n >> m; precalc(); pref(); long long total = der[m]; long long stirling = 0; for (int j = 1; j <= m; ++j) { long long val = (1LL * C(m, j) * put(j, n)) % mod; if ((m - j) % 2 == 0) { stirling = (stirling + val) % mod; } else { stirling = (mod + stirling - val) % mod; } } cout << (1LL * stirling * total) % mod; return 0 ; }