#include #define MOD 666013 using namespace std; 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; } void euc(int a, int b, int& x, int& y) { if(!b) { x = 1; y = 0; return; } int x0, y0; euc(b, a % b, x0, y0); x = y0; y = x0 - (a / b) * y0; } int inversMod(int a) { int x, y; euc(a, MOD, x, y); if(x < 0) x += MOD; return x; } int mpow(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 stirling(int n, int m) { int c = 1; int rez = 0; for(int i = 0; i < m; i++) { if(i & 1) rez -= (1LL * c * mpow(m - i, n)) % MOD; else rez += (1LL * c * mpow(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() { int n, m; //freopen("zombie.in", "r", stdin); scanf("%d %d", &n, &m); int rez = (1LL * stirling(n, m) * deranj(m)) % MOD; printf("%d", rez); return 0; }