#include <bits/stdc++.h>
using namespace std;
long long fastpow(long long a, long long b, long long m = 998244353LL) {
  long long res = 1;
  a %= m;
  while (b > 0) {
    if (b & 1) res = (res * a) % m;
    a = (a * a) % m;
    b >>= 1;
  }
  return res;
}
long long n, k;
const long long maxN = 400005;
vector<long long> invN(maxN), fact(maxN), invFact(maxN);
void precomp() {
  fact[0] = fact[1] = invFact[0] = invFact[1] = invN[0] = invN[1] = 1;
  for (long long i = 2; i < maxN; i++) {
    invN[i] = ((998244353LL - (998244353LL / i) % 998244353LL) *
               (invN[998244353LL % i] % 998244353LL % 998244353LL)) %
              998244353LL;
    fact[i] = ((fact[i - 1] % 998244353LL) * (i % 998244353LL)) % 998244353LL;
    invFact[i] = ((invN[i] % 998244353LL) * (invFact[i - 1] % 998244353LL)) %
                 998244353LL;
  }
}
long long nck(long long n, long long k) {
  return ((invFact[n - k] % 998244353LL) *
          (((fact[n] % 998244353LL) * (invFact[k] % 998244353LL)) %
           998244353LL % 998244353LL)) %
         998244353LL;
}
int32_t main() {
  ios_base ::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  ;
  precomp();
  cin >> n >> k;
  if (k >= n) {
    cout << 0 << endl;
  } else if (k == 0) {
    cout << fact[n] << endl;
  } else {
    long long ans = 0;
    k = n - k;
    long long sign = 1;
    for (long long i = 0; i < k; i++) {
      long long curr = nck(k, i);
      curr = ((curr % 998244353LL) * (fastpow(k - i, n) % 998244353LL)) %
             998244353LL;
      curr = ((sign % 998244353LL) * (curr % 998244353LL)) % 998244353LL;
      ans = (ans + curr + 998244353LL) % 998244353LL;
      sign *= -1;
    }
    ans = ((2 % 998244353LL) *
           (((ans % 998244353LL) * (nck(n, k) % 998244353LL)) % 998244353LL %
            998244353LL)) %
          998244353LL;
    cout << ans << endl;
  }
  return 0;
}
