#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e7 + 7;
const int mod = 998244353;
const long long INF = 1e18;
long long jc[maxn];
long long n, k;
long long inv2 = 499122177;
void init() {
  jc[0] = 1;
  for (long long i = 1; i < maxn; i++) jc[i] = jc[i - 1] * i % mod;
}
long long exgcd(long long a, long long b, long long &x, long long &y) {
  if (!b) {
    x = 1;
    y = 0;
    return a;
  }
  long long d = exgcd(b, a % b, y, x);
  y -= a / b * x;
  return d;
}
long long inv(long long a, long long n) {
  long long x, y;
  exgcd(a, n, x, y);
  return (x + n) % n;
}
long long C(long long n, long long m) {
  return jc[n] * inv(jc[m] * jc[n - m] % mod, mod) % mod;
}
long long qpow(long long x, int n) {
  long long res = 1;
  while (n) {
    if (n & 1) res = (res * x) % mod;
    x = (x * x) % mod;
    n /= 2;
  }
  return res;
}
void rua() {
  init();
  scanf("%lld%lld", &n, &k);
  if (k >= n) {
    printf("0\n");
    return;
  }
  long long ans = 0;
  n -= k;
  for (int i = 0; i <= n; i += 2)
    ans = (ans + C(n, i) * qpow(n - i, n + k) % mod) % mod;
  for (int i = 1; i <= n; i += 2)
    ans = (ans - C(n, i) * qpow(n - i, n + k) % mod + mod) % mod;
  ans = ans * 2ll % mod * C(n + k, n) % mod;
  if (k == 0) ans = (ans * 499122177) % mod;
  printf("%lld\n", ans);
}
int main() {
  rua();
  return 0;
}
