#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a,i##end=b;i<=i##end;i++)
#define drep(i,a,b) for(int i=a,i##end=b;i>=i##end;i--)
#define erep(i,j) for(int i=hd[j];i;i=nxt[i])
inline int read(){
	int x=0,f=1;char c=getchar();
	while(c<48||c>57){if(c=='-')f=-1;c=getchar();}
	while(c>=48&&c<=57)x=(x<<1)+(x<<3)+(c^48),c=getchar();
	return x*f;
}

using namespace std;
const int M=1e6+5;
int mob[M],vis[M],cnt[M];
int E[M*20],hd[M*20],nxt[M*20];
int tot;
void add(int a,int b){
	E[++tot]=b,nxt[tot]=hd[a];
	hd[a]=tot;
}
long long que(int l,int r){
	long long ans=0;
	rep(i,1,r)cnt[i]=0;
	rep(i,l,r){
		erep(j,i){
			int t=E[j];
			ans+=cnt[t];
			cnt[t]+=mob[t];
		}
	}
	return ans;
}
int main() {
	int L=read(),R=read();
	rep(i,1,M-1)mob[i]=1;
	rep(i,2,M-1){
		if(vis[i])continue;
		mob[i]=-1;
		for(int j=i+i;j<M;j+=i){
			vis[j]=1;
			if(j/i%i==0)mob[j]=0;
			else mob[j]=-mob[j];
		}
	}
	rep(i,1,M-1)for(int j=i;j<M;j+=i)add(j,i);
	long long ans=0;
	rep(i,2,M-1){
		int mi=2e9,mx=-2e9;
		for(int j=i+i;j<M;j+=i)if(j>=L&&j<=R)mi=min(mi,j/i),mx=max(mx,j/i);
		if(mi<=mx)ans+=que(mi,mx);
	}
	printf("%lld\n",ans*2);
	return 0;
}
#include <stdio.h>
#include <iostream>
#include <vector>
#include <queue>
#include <stack>
#include <algorithm>

using ll = long long int;
const int INF = (1<<30);
const ll INFLL = (1ll<<60);
const ll MOD = 998244353ll;

#define l_ength size

void mul_mod(ll& a, ll b){
	a *= b;
	a %= MOD;
}

void add_mod(ll& a, ll b){
	a = (a<MOD)?a:(a-MOD);
	b = (b<MOD)?b:(b-MOD);
	a += b;
	a = (a<MOD)?a:(a-MOD);
}

ll memo[5050][5050];

ll rwpw(ll a, ll p){
	return memo[a][p];
}

int main(void){
	int n,m,i,j,v;
	ll ans = 0ll, calc, tmp;
	std::cin >> n >> m;
	for(i=0; i<=m; ++i){
		memo[i][0] = 1ll;
		for(j=1; j<=n; ++j){
			memo[i][j] = memo[i][j-1]*i%MOD;
		}
	}
	for(v=1; v<=m; ++v){
		// 端&端
		add_mod(ans,rwpw(m-v+1,n));
		add_mod(ans,MOD-rwpw(m-v,n));
		for(i=1; i<n; ++i){
			// 片方が端
			calc = 0ll;
			add_mod(calc,rwpw(m-v+1,i));
			add_mod(calc,MOD-rwpw(m-v,i));
			mul_mod(calc,v-1);
			tmp = calc;
			mul_mod(tmp,rwpw(m,n-i-1));
			mul_mod(tmp,2ll);
			add_mod(ans,tmp);
			if(n-i<2){
				continue;
			}
			tmp = calc;
			mul_mod(tmp,v-1);
			mul_mod(tmp,rwpw(m,n-i-2));
			mul_mod(tmp,n-i-1);
			add_mod(ans,tmp);
		}
	}
	std::cout << ans << std::endl;
	return 0;
}
