import
java.util.*;
class
GFG {
static
long
divisorsOfNchooseK(
long
N,
long
K)
{
long
M = Math.max((
long
)Math.sqrt(N), K);
boolean
[] prime =
new
boolean
[(
int
)M +
1
];
for
(
long
x =
0
; x < M +
1
; x++) {
prime[(
int
)x] =
true
;
}
prime[
0
] = prime[
1
] =
false
;
for
(
long
p =
2
; p * p < prime.length; p++) {
if
(prime[(
int
)p] ==
true
) {
for
(
long
i =
2
* p; i < prime.length;
i += p) {
prime[(
int
)i] =
false
;
}
}
}
long
[] deno =
new
long
[(
int
)K +
1
];
for
(
long
i =
1
; i <= K; i++) {
deno[(
int
)i] = i;
}
long
[] nume =
new
long
[(
int
)K];
long
offset = N - K +
1
;
for
(
long
i =
0
; i < K; i++) {
nume[(
int
)i] = offset + i;
}
long
ans =
1
;
for
(
long
p =
2
; p < prime.length; p++) {
if
(prime[(
int
)p] ==
true
) {
long
power =
0
;
for
(
long
i = p; i <= K; i += p) {
while
(deno[(
int
)i] % p ==
0
) {
power--;
deno[(
int
)i] /= p;
}
}
for
(
long
i = ((N - K +
1
) + p -
1
) / p * p;
i <= N; i += p) {
while
(nume[(
int
)(i - offset)] % p ==
0
) {
power++;
nume[(
int
)(i - offset)] /= p;
}
}
ans *= (power +
1
);
ans %=
998244353
;
}
}
for
(
long
i = N - K +
1
; i <= N; i++) {
if
(nume[(
int
)(i - offset)] !=
1
) {
ans *=
2
;
ans %=
998244353
;
}
}
return
ans;
}
public
static
void
main (String[] args) {
long
N =
10
, K =
3
;
long
ans = divisorsOfNchooseK(N, K);
System.out.print(ans);
}
}