C - Brazo robótico

Languages: C, C++, Java, Tiger, Python, Pascal, JavaScript, Haskell, C#
Time & Memory limits: (details)

Una fábrica dedicada al ensamblaje de automóviles dispone de un brazo robótico para realizar dicha tarea. Cada día la fábrica ensambla exactamente N automóviles, todos del mismo modelo y contando cada uno con K piezas. Las piezas son numeradas de 1 a K y deben ubicarse en cada automóvil en este mismo orden, es decir, primero se ubica la pieza 1, después la 2 y así sucesivamente hasta ubicar la pieza con identificador K. El brazo robótico opera de la siguiente forma:

1) Si los N automóviles están ensamblados con las K piezas, entonces el trabajo termina por ese día.
2) De los automóviles que faltan por piezas, se escoge uno aleatoriamente.
3) Si al automóvil escogido se le han colocado T (T < K) piezas, entonces se le pone la pieza con identificador T + 1.
4) Ejecutar el paso #1.

Para este problema usted debe escribir un programa que dado N y K, calcule la cantidad de formas que el brazo robótico puede completar su tarea. Note que el robot ejecutara N * K pasos y en cada uno escogerá un automóvil. Dos formas de realizar el trabajo son diferentes si y solo si existe al menos un paso en el cual la selección de los automóviles difiere.

Input

Línea 1 : Dos enteros separados por espacio N y K (1 <= N <= 10^15, 1 <= K <= 10^6).

Output

Línea 1 : Su respuesta módulo 1999993.

Sample test(s)

Input
8 2
Output
1934048

Hints

Hint
Con 8 automóviles y 2 piezas por cada uno, el brazo robótico puede realizar de 81729648000 formas su tarea de ensamblaje.