//#include #include #include #include #include #include using namespace std; //ifstream cin("tema.in"); //ofstream cout("tema.out"); const int MAXN = 100000; const int MOD = 666013; int factorial[1 + MAXN], inverse[1 + MAXN], dp[1 + MAXN]; int RaiseToPower(int base, int power) { int answer = 1; while (power) { if (power % 2) answer = (1LL * answer * base) % MOD; base = (1LL * base * base) % MOD; power /= 2; } return answer; } void Precompute(int n) { factorial[0] = inverse[0] = 1; for (int i = 1; i <= n; i++) factorial[i] = (1LL * factorial[i - 1] * i) % MOD; inverse[n] = RaiseToPower(factorial[n], MOD - 2); for (int i = n - 1; i >= 1; i--) inverse[i] = (1LL * (i + 1) * inverse[i + 1]) % MOD; } int Combinations(int n, int k) { int answer = (1LL * inverse[n - k] * inverse[k]) % MOD; answer = (1LL * answer * factorial[n]) % MOD; return answer; } int main() { Precompute(MAXN); int n, m; cin >> n >> m; if (n < m || n == 1) { cout << "0\n"; return 0; } dp[2] = 1; for (int i = 3; i <= m; i++) dp[i] = (1LL * (i - 1) * (dp[i - 1] + dp[i - 2])) % MOD; int sum = 0; for (int j = 0; j <= m; j++) { int sign = 1; if ((m - j) % 2) sign = -1; sum = sum + sign * (1LL * RaiseToPower(j, n) * Combinations(m, j)) % MOD; if (sum < 0) sum += MOD; if (sum >= MOD) sum -= MOD; } int answer = (1LL * dp[m] * sum) % MOD; cout << answer << "\n"; return 0; }