#include <bits/stdc++.h>

using namespace std;

const int nmax = 100005;
const int mod = 666013;

int n , m , dp[nmax] , i , answer , fact[nmax] , inv[nmax] , add;

int fastpow(int x , int p)
{
    int ret = 1;
    for (int i = 0 ; (1 << i) <= p ; ++i)
    {
        if ((1 << i) & p) ret = (1LL * ret * x) % mod;
        x = (1LL * x * x) % mod;
    }
    return ret;
}

int main()
{

freopen("test.in" , "r" , stdin);
freopen("test.out" , "w" , stdout);

cin >> n >> m;

if (n < m)
{
    cout << "0" << '\n';
    return 0;
}

dp[1] = 0 , dp[2] = 1;
for (i = 3 ; i <= m ; ++i)
dp[i] = (1LL * (i - 1) * (dp[i - 1] + dp[i - 2])) % mod;

fact[0] = 1;
for (i = 1 ; i <= m ; ++i)
fact[i] = (1LL * fact[i - 1] * i) % mod;

inv[0] = 1;
for (i = 1 ; i <= m ; ++i)
inv[i] = (1LL * inv[i - 1] * fastpow(i , mod - 2)) % mod;

for (i = 0 ; i <= m ; ++i)
{
    add = (1LL * fact[m] * inv[i]) % mod;
    add = (1LL * add * inv[m - i]) % mod;
    add = (1LL * add * fastpow(m - i , n)) % mod;

    if (i % 2 == 0) answer = (answer + add) % mod;
    else answer = (answer - add + mod) % mod;
}

answer = (1LL * answer * dp[m]) % mod;

cout << answer << '\n';

return 0;
}