// #include <atcoder/all>
#include <bits/stdc++.h>
using namespace std;
// using namespace atcoder;

#define rep(i, n) for(int i = 0; i < (n); ++i)
#define repr(i, n) for(int i = (n-1); i >= 0; --i)

template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; }

typedef long long ll;
typedef pair<int, int> P;

const int MAX = 200005;
const int INF = 1001001001;
const int MOD = 1000000007;

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

    ll ans = 0;
    for (int x = 2; x <= 2*N; ++x) {
        int y = x - K;
        if (y < 2 || 2*N < y) continue;

        ans += (ll)(x-1 - max(0, (x-N-1) * 2)) * (y-1 - max(0, (y-N-1) * 2));
    }

    cout << ans << endl;
}
#include <bits/stdc++.h>
using namespace std;
#pragma optimize("-O3")
#define int long long int
#define f first
#define s second
#define pb push_back
#define endl '\n'
const int MOD=998244353;
int n, m;
int po[5005][5005]; 
 
main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	cin>>n>>m;
	int tot=n;
	for(int i=0; i<5005; i++){
		po[i][0]=1;
	}
	po[0][0]=1;
	for(int i=1; i<5005; i++){
		for(int j=1; j<5005; j++){
			po[i][j]=(i*po[i][j-1])%MOD;
		}
	}
	for(int i=0; i<n; i++){
		tot=(tot*m)%MOD;
	}
	
	for(int i=0; i<=n-2; i++){
		int val=n-i-1;
		for(int j=1; j<=m; j++){
			int val=((((n-i-1)*po[m-j][i])%MOD)*po[m][n-i-2])%MOD;
			tot=(tot-val+MOD)%MOD;
		}
	}
	cout<<tot;
	return 0;
}
