#include #include #include #include #include #include #include const int MAXN = 100005; const int MOD = 666013; inline int sum(const int& a, const int& b) { int c = a + b; if (c >= MOD) { c -= MOD; } return c; } inline int prod(const int& a, const int& b) { return (1LL * a * b) % MOD; } int modpow(int base, int exp) { int res = 1; int cur = base; for (int p = 1; p <= exp; p <<= 1) { if (p & exp) { res = prod(res, cur); } cur = prod(cur, cur); } return res; } int fact[MAXN]; int tcaf[MAXN]; int derange[MAXN]; void gen_fact() { fact[0] = 1; tcaf[0] = 1; for (int i = 1; i < MAXN; ++i) { fact[i] = prod(fact[i - 1], i); tcaf[i] = modpow(fact[i], MOD - 2); } derange[0] = 1; derange[1] = 0; for (int i = 2; i < MAXN; ++i) { derange[i] = prod((i - 1), sum(derange[i - 1], derange[i - 2])); } } int stirling(int n, int k) { if (n == 0 and k == 0) return 1; if (n == 0 or k == 0) return 0; return sum(prod(k, stirling(n - 1, k)), stirling(n - 1, k - 1)); } int main() { gen_fact(); int n, m; scanf("%d %d", &n, &m); int math = prod(fact[m], derange[m]); int sold = stirling(n, m); // printf("%d %d\n", math, sold); int ans = prod(math, sold); printf("%d\n", ans); return 0; }