{.warning[UnusedImport]: off.} import algorithm,sequtils,tables,math,sets,strutils,sugar,heapqueue,deques,bitops,re,streams,times,strscans let outstream=newFileStream(stdout) proc input():string{.inline.}=stdin.readLine proc print(args:varargs[string,`$`]):void{.inline.}=stdout.writeLine(args) proc debug(args:varargs[string,`$`]):void{.inline.}=stderr.writeLine(args) proc flush():void{.inline.}=flush(outstream) proc `%`(x:int,y:int):int{.inline.}=((x mod y)+y) mod y proc `//`(x:int,y:int):int{.inline.}=((x)-(x%y)) div y proc `%=`(x:var int,y:int):void{.inline.}=x=x%y proc `//=`(x:var int,y:int):void{.inline.}=x=x//y proc `**`(x:int,y:int):int{.inline.}=x^y proc `**`(x:float,y:int):float{.inline.}=x^y proc `^`(x:int,y:int):int{.inline.}=x xor y proc `&`(x:int,y:int):int{.inline.}=x and y proc `|`(x:int,y:int):int{.inline.}=x or y proc `<<`(x:int,y:int):int{.inline.}=x shl y proc `>>`(x:int,y:int):int{.inline.}=x shr y proc `~`(x:int):int{.inline.}=not x proc `^=`(x:var int,y:int):void{.inline.}=x=x xor y proc `&=`(x:var int,y:int):void{.inline.}=x=x and y proc `|=`(x:var int,y:int):void{.inline.}=x=x or y proc `<<=`(x:var int,y:int):void{.inline.}=x=x shl y proc `>>=`(x:var int,y:int):void{.inline.}=x=x shr y proc `max=`(x:var int,y:int):void{.inline.}=x=max(x,y) proc `min=`(x:var int,y:int):void{.inline.}=x=min(x,y) proc `max=`(x:var float,y:float):void{.inline.}=x=max(x,y) proc `min=`(x:var float,y:float):void{.inline.}=x=min(x,y) import atcoder/modint,atcoder/extra/math/combination type mint=modint998244353 var N,K:int discard input().scanf("$i $i",N,K) if K==0: print 1 quit() if K==1: if N%2==0:print 2 else:print N-2 quit() var ans:mint=0 for i in 0..N-K: if i%2==1: continue let use=N-i ans+=(i+1)*mint.C(use-2,K-2) print ans