#Whitespace, 91 bytes
Whitespace, 91 bytes
[S S S T N Push_1][S N S _Duplicate_1][S N S _Duplicate_1][T N T T _Read_STDIN_as_integer_(base)][T T T _Retrieve_base][S S S N _Push_0][T N T T _Read_STDIN_as_integer_(factorial)][N S S N _Create_Label_LOOP][S N S _Duplicate_base][S S S T N _Push_1][T S S T _Subtract][N T T S N _If_negative_jump_to_Label_PRINT_RESULT][S N S _Duplicate_base][S T S S T S N _Copy_0-based_2nd_(result)][T S S N _Multiply][S N T _Swap_top_two][S S S N _Push_0][T T T _Retrieve_factorial][T S S T _Subtract][N S N N _Jump_to_Label_LOOP][N S S S N _Create_Label_PRINT_RESULT][S N N _Discard_top][T N S T _Print_result_as_integer] Letters S (space), T (tab), and N (new-line) added as highlighting only.
[..._some_action] added as explanation only.
Try it online (with raw spaces, tabs and new-lines only).
Explanation in pseudo-code:
Integer result = 1 Integer base = STDIN as integer Integer factorial = STDIN as integer Start LOOP: If(base <= 0): Call function PRINT_RESULT result = result * base base = base - factorial Go to next iteration of LOOP function PRINT_RESULT: Print result as integer to STDOUT