#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
long long n, k;
long long p[200005];
long long md = 998244353;
long long binpow(long long a, long long b) {
  if (b == 1) {
    return a % md;
  }
  long long z = binpow(a, b / 2);
  if (b & 1) {
    return z * z % md * a % md;
  }
  return z * z % md;
}
long long C(long long n, long long m) {
  return p[n] * binpow(p[m] * p[n - m] % md, md - 2) % md;
}
int main() {
  p[0] = 1;
  for (long long i = 1; i <= 200000; i++) {
    p[i] = p[i - 1] * i % md;
  }
  cin >> n >> k;
  if (k >= n) {
    cout << 0;
    return 0;
  }
  long long c = n - k;
  long long ans = 0;
  long long x = 1;
  for (long long i = c; i >= 0; i--) {
    if (x == -1) {
      ans = (ans + md - C(c, i) * binpow(i, n) % md) % md;
      x = 1;
    } else {
      ans = (ans + C(c, i) * binpow(i, n) % md) % md;
      x = -1;
    }
  }
  ans = ans * C(n, c) % md;
  if (k > 0) ans = ans * 2 % md;
  cout << ans;
}
