#include<bits/stdc++.h>
using namespace std;
using UL=unsigned int;
using LL=long long;
using ULL=unsigned long long;
#define rep(i,n) for(int i=0; i<(n); i++)

const ULL M = 1000000007;
ULL N,K;
ULL F[1000001];
ULL I[1000001];
ULL iF[1000001];

ULL P(ULL n,ULL r){ return F[n]*iF[n-r]%M; }
ULL C(ULL n,ULL r){ return F[n]*iF[r]%M*iF[n-r]%M; }

int main(){
 cin>>N>>K;

 F[0]=I[1]=iF[0]=1;
 for(int i=1; i<=1000000; i++) F[i]=F[i-1]*i%M;
 for(int i=2; i<=1000000; i++) I[i]=M-M/i*I[M%i]%M;
 for(int i=1; i<=1000000; i++) iF[i]=iF[i-1]*I[i]%M;

 ULL ans = 0;
 for(int i=0; i<=N; i++){
  ULL tmp=0;
  tmp += P(K-i,N-i);
  tmp = tmp * C(N,i) % M;
  if(i&1) ans += M-tmp; else ans += tmp;
 }

 ans %= M;
 ans = ans * P(K,N) % M;
 cout<<ans<<endl;

 return 0;
}