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: Accepted)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(k,i,n) for(ll i=k;i<n;++i)
const ll mod=1e9+7;
ll mpow(ll x,ll n){
    ll res=1;
    for(ll i=n;i;i>>=1){
        if(i%2==1)res=res*x%mod;
        x=x*x%mod;
    }
    return res;
}
static ll f[(ll)1e6];
int main(void){
    ll n,m;
    cin>>n>>m;
    ll ans=0;
    f[0]=1;
    rep(1,i,1e6)f[i]=f[i-1]*i%mod;
    rep(0,k,n+1){
        ll tmp=(k%2)?(-1):(1);
        ll c=f[n]*mpow(f[k]*f[n-k]%mod,mod-2)%mod;
        ll p=f[m]*mpow(f[m-k],mod-2)%mod;
        //cout<<p<<endl;
        tmp=tmp*c%mod*p%mod;
        p=f[m-k]*mpow(f[m-n],mod-2)%mod;
        tmp=tmp*p%mod*p%mod;
        ans=(ans+tmp+mod)%mod;
    }
    cout<<ans;
}