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 Perl (5.26.1) (judge verdict: Accepted)

use strict;
use warnings;

use constant MOD => 1000000007;

my ($n, $m) = split(/\s+/, <>);
my @fact = (1);
for(my $i = 1; $i <= $m; ++$i){
	push(@fact, $fact[-1] * $i % MOD);
}
my @ifact;
$ifact[$m] = powmod($fact[$m], MOD - 2);
for(my $i = $m; $i > 0; --$i){
	$ifact[$i - 1] = $ifact[$i] * $i % MOD;
}

my $ans = perm($m, $n);
for(my $i = 1; $i <= $n; ++$i){
	my $sgn = $i & 1 ? -1 : 1;
	my $t = cmb($n, $i) * perm($m - $i, $n - $i);
	$ans = ($ans + $sgn * $t) % MOD;
}
$ans = $ans * $fact[$m] % MOD * $ifact[$m - $n] % MOD;
print "$ans\n";

sub powmod{
	my ($x, $y) = @_;
	my $a = 1;
	while($y){
		$a = $a * $x % MOD if $y & 1;
		$y >>= 1;
		$x = $x * $x % MOD;
	}
	return $a;
}

sub perm{
	my ($n, $k) = @_;
	return $fact[$n] * $ifact[$n - $k] % MOD;
}

sub cmb{
	my ($n, $k) = @_;
	return $fact[$n] * $ifact[$n - $k] % MOD * $ifact[$k] % MOD;
}