#include <bits/stdc++.h>
using namespace std;
const int MAX = 2e5 + 6;
long long int fact[MAX], invfact[MAX];
long long int bigMod(long long int a, long long int b) {
  long long int p;
  if (b == 0) return 1;
  p = (bigMod(a, b / 2) % 998244353);
  p = (p * p) % 998244353;
  if (b & 1) p = (p * a) % 998244353;
  return p;
}
long long int modInverse(long long int x) { return bigMod(x, 998244353 - 2); }
long long int ncr(int n, int r) {
  if (n < r || n < 0 || r < 0) return 0;
  long long int up = fact[n];
  long long int down = (invfact[r] * invfact[n - r]) % 998244353;
  return (up * down) % 998244353;
}
void pre() {
  fact[0] = 1;
  for (int i = 1; i < MAX; i++) fact[i] = (fact[i - 1] * i) % 998244353;
  invfact[MAX - 1] = modInverse(fact[MAX - 1]);
  for (int i = MAX - 2; i >= 0; i--)
    invfact[i] = (invfact[i + 1] * (i + 1)) % 998244353;
}
long long int solve(int n, int k) {
  long long int sum = 0;
  for (int i = 0; i <= k; i++) {
    long long int tmp = (ncr(k, i) * bigMod(k - i, n)) % 998244353;
    if (i & 1) tmp *= -1;
    sum = (sum + tmp + 998244353) % 998244353;
  }
  sum = (sum * ncr(n, k)) % 998244353;
  return sum;
}
int main() {
  pre();
  int n, k;
  cin >> n >> k;
  if (k >= n) {
    cout << 0 << '\n';
    return 0;
  }
  long long int ret = solve(n, n - k);
  if (k > 0) ret = (ret * 2) % 998244353;
  cout << ret << '\n';
}
