package main
import (
"bufio"
"fmt"
"os"
)
const MOD = 998244353
func power(base, exp int64) int64 {
res := int64(1)
base %= MOD
if base < 0 {
base += MOD
}
for exp > 0 {
if exp%2 == 1 {
res = (res * base) % MOD
}
base = (base * base) % MOD
exp /= 2
}
return res
}
func main() {
in := bufio.NewReader(os.Stdin)
var N, K int64
if _, err := fmt.Fscan(in, &N, &K); err != nil {
return
}
fact := make([]int64, N+1)
invFact := make([]int64, N+1)
fact[0] = 1
invFact[0] = 1
for i := int64(1); i <= N; i++ {
fact[i] = (fact[i-1] * i) % MOD
}
invFact[N] = power(fact[N], MOD-2)
for i := N - 1; i >= 1; i-- {
invFact[i] = (invFact[i+1] * (i + 1)) % MOD
}
ans := int64(0)
for z := int64(0); z <= N; z++ {
minVal := z
if N-1 < minVal {
minVal = N - 1
}
cnt1 := minVal - (N - K) + 1
if cnt1 < 0 {
cnt1 = 0
}
L := z + 1
if N-K > L {
L = N - K
}
factPart := int64(1)
if L <= N-1 {
factPart = fact[N+1-L]
}
base := (N + 1 - z) % MOD
if base < 0 {
base += MOD
}
powerPart := power(base, cnt1)
F := (powerPart * factPart) % MOD
var W int64
if z == 0 {
W = fact[N]
} else {
diff := (invFact[z] - invFact[z-1]) % MOD
if diff < 0 {
diff += MOD
}
W = (fact[N] * diff) % MOD
}
term := (F * W) % MOD
ans = (ans + term) % MOD
}
fmt.Println(ans)
}