#include #define MOD 666013 using namespace std; void gcd(int a, int b, int& x, int& y){ if(!b){ x = 1; y = 0; return; } int x0, y0; gcd(b, a % b, x0, y0); x = y0; y = x0 - (a/b) * y0; } int inversMod(int a){ int x, y; gcd(a, MOD, x, y); if(x<0) x += MOD; return x; } int pow(int a, int p){ int b = 1; while(p){ if(p & 1) b = (1LL * b * a) % MOD; p >>= 1; a = (1LL * a * a) % MOD; } return b; } int deranj(int n){ int dm2 = 0, dm1 = 1, d; if(n == 1) return 0; else if(n == 2) return 1; for(int i = 3; i <= n; i++){ d = (1LL * (i-1) * (dm1+dm2)) % MOD; dm2 = dm1; dm1 = d; } return d; } int stirling(int n, int m){ int c = 1; int rez = 0; for(int i = 0; i < m; i++){ if(i & 1) rez -= (1LL * c * pow(m - i, n)) % MOD; else rez += (1LL * c * pow(m - i, n)) % MOD; c = (1LL * c * (m - i)) % MOD; c = (1LL * c * inversMod(i + 1)) % MOD; if(rez < 0) rez += MOD; } return rez; } int main() { //freopen("zombie.in", "r", stdin); int n, m; cin >> n >> m; int rez = (1LL * stirling(n, m) * deranj(m)) % MOD; cout << rez; }