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>
#define all(x) x.begin(), x.end()
#define pb push_back
using namespace std;
const int inf = 1<<30, maxn = 1<<20;
using ll = long long;
const int mod = 1e9 + 7;
ll fact[maxn], inv[maxn];
void pre() {
	for(int i = 0; i < maxn; i++)
		if(i < 2) fact[i] = inv[i] = 1;
		else fact[i] = i, inv[i] = mod - (mod/i)*inv[mod%i]%mod;
	for(int i = 1; i < maxn; i++)
		fact[i] = fact[i]*fact[i-1]%mod,
		inv[i] = inv[i]*inv[i-1]%mod;
}
ll nck(ll n, ll k) {
	if(k < 0 || k > n) return 0;
	ll t = fact[n]*inv[k]%mod;
	return t*inv[n-k]%mod;
}
ll A(ll n, ll k) {
	if(k < 0 || k > n) return 0;
	return fact[n]*inv[n-k]%mod;
}
int main() {
	cin.tie(0)->sync_with_stdio(0);
	pre();
	ll n, m;
	cin >> n >> m;
	ll ans = 0;
	for(int i = 0; i <= n; i++) {
		ll t = A(m-i, n-i)*A(m-i, n-i)%mod;
		t = t * nck(n, i) % mod;
		t = t * A(m, i) %mod;
		if(i&1) ans = (mod + ans - t)%mod;
		else ans = (ans + t)%mod;
	}
	cout << ans;
	return 0;
}