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 Rust (1.42.0) (judge verdict: Accepted)

fn main() {
    proconio::input! {
        n: usize,
        m: usize,
    }
    let mut inv=vec![1;m+2];
    for i in 2..=m {
        inv[i]=inv[MOD%i]*(MOD-MOD/i)%MOD;
    }
    let mut t=0;
    let mut a=1;
    let mut b=1;
    let mut c=1;
    for i in 0..n {
        c=c*(m-i)%MOD;
    }
    for i in 0..=n {
        let v=a*b%MOD*c%MOD*c%MOD;
        let v=if i&1==0 {v} else {MOD-v};
        t=(t+v)%MOD;
        a=a*(n-i)%MOD*inv[i+1]%MOD;
        b=b*(m-i)%MOD;
        c=c*inv[m-i]%MOD;
    }
    println!("{}",t);
}
const MOD: usize=1000000007;