Problem:
Score : 500 points

Problem Statement

Count the pairs of length-N sequences consisting of integers between 1 and M (inclusive), A_1, A_2, \cdots, A_{N} and B_1, B_2, \cdots, B_{N}, that satisfy all of the following conditions:

A_i \neq B_i, for every i such that 1\leq i\leq N.

A_i \neq A_j and B_i \neq B_j, for every (i, j) such that 1\leq i < j\leq N.

Since the count can be enormous, print it modulo (10^9+7).

Constraints

1\leq N \leq M \leq 5\times10^5

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N M

Output

Print the count modulo (10^9+7).

Sample Input 1

2 2

Sample Output 1

2

A_1=1,A_2=2,B_1=2,B_2=1 and A_1=2,A_2=1,B_1=1,B_2=2 satisfy the conditions.

Sample Input 2

2 3

Sample Output 2

18

Sample Input 3

141421 356237

Sample Output 3

881613484

Solution in C (GCC 9.2.1) (judge verdict: Wrong Answer)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>
#include<math.h>
#include<limits.h>
#define MOD 1000000007
#define MAX 500002
typedef long long ll;
ll my_func(ll a){
    ll ans = 1;
    for(ll i=1;i<=a;i++){
        if(ans > MOD) ans %= MOD;
        ans *= i;
    }
    return ans;
}
int main(){
    ll N,M;
    scanf("%lld %lld",&N,&M);
    ll DP[MAX]={0};
    DP[N] = my_func(N); //後で更新
    for(ll i=N+1;i<=MAX;i++){
        DP[i] = DP[i-1]%MOD + (DP[i-1]*N*2)%MOD + (DP[i-1]*N*N)%MOD;
        DP[i] %= MOD;
    }
    printf("%lld",DP[M]);
}