#include<bits/stdc++.h>
using namespace std;
typedef long long int lli;
#define MAX 1000005
#define MOD 1000000007
#define endl "\n"
lli fact[MAX];
lli invfact[MAX];
long long binpow(long long a, long long b) {
    lli m = MOD;
	a %= m;
    long long res = 1;
    while (b > 0) {
        if (b & 1)
            res = res * a % m;
        a = a * a % m;
        b >>= 1;
    }
    return res;
}
void precompute(){
	fact[0] = 1;
	invfact[0] = 1;
	for(lli i = 1; i<MAX-5; i++){
		fact[i] = fact[i-1]*i%MOD;
		invfact[i] = binpow(fact[i], MOD-2);
	}
}
lli nCr(lli x, lli y){
	if(y == 0)
		return 1;
	return fact[x]*invfact[y]%MOD*invfact[x-y]%MOD;
}
int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(NULL);
	precompute();
	lli n,m;
	cin>>n>>m;
	lli ans = 0;
	lli q = nCr(m,n)*fact[n]%MOD;
	for(lli i = 0; i<=n; i++){
		lli qty = nCr(n,i)*nCr(m-i,n-i)%MOD;
		qty *= fact[n-i];
		qty %= MOD;
		if(i%2){
			ans -= qty;
		}
		else{
			ans += qty;
		}
		ans %=MOD;
	}
	ans += MOD;
	ans%=MOD;
	cout<<(q*ans)%MOD<<endl;
}