#include using namespace std; typedef long long int64; const int kMaxN = 100005, kMod = 666013; int Dp[kMaxN], Fact[kMaxN], Inv[kMod]; int Raise(int base, int exponent) { int ret = 1; while(exponent) { if(exponent % 2) ret = (1LL * ret * base) % kMod; base = (1LL * base * base) % kMod; exponent /= 2; } return ret; } int main(void) { cin.tie(0); ios_base::sync_with_stdio(false); int n, m; cin >> n >> m; if(n < m) { cout << "0\n"; return 0; } Fact[0] = 1; for(int i = 1; i <= n; ++i) { Fact[i] = (1LL * Fact[i - 1] * i) % kMod; } Inv[1] = 1; for(int i = 2; i < kMod; ++i) { Inv[i] = (-1LL * kMod / i * Inv[kMod % i]) % kMod; if(Inv[i] < 0) Inv[i] += kMod; } // deranjamente Dp[0] = 1; for(int i = 1; i <= m; ++i) { Dp[i] = (1LL * i * Dp[i - 1]) % kMod; if(i & 1) { Dp[i]--; if(Dp[i] < 0) Dp[i] += kMod; } else { Dp[i]++; if(Dp[i] == kMod) Dp[i] -= kMod; } } // stirling de speta 2 int answer = 0; for(int i = 0; i <= m; ++i) { // (-1)^(m - i) * C(m, i) * i ^ n int aux = (1LL * Fact[m] * Inv[Fact[i]]) % kMod; aux = (1LL * aux * Inv[Fact[m - i]]) % kMod; aux = (1LL * aux * Raise(i, n)) % kMod; if((m - i) & 1) { answer -= aux; if(answer < 0) answer += kMod; } else { answer += aux; if(answer >= kMod) answer -= kMod; } } //answer = (1LL * answer * Inv[Fact[m]]) % kMod; answer = (1LL * answer * Dp[m]) % kMod; cout << answer << '\n'; return 0; }