#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

const int maxl=4e5+10;
const int mod=998244353;

int n,m;ll ans;
int p[maxl],dy[maxl];
ll fac[maxl],inv[maxl],dp[maxl];
bool no[maxl];

inline void shai()
{
	for(int i=2;i<maxl;i++)
	{
		if(!no[i]) p[++p[0]]=i,dy[i]=i;
		int j=1,t=p[1]*i;
		while(j<=p[0] && t<maxl)
		{
			no[t]=true;dy[t]=p[j];
			if(i%p[j]==0)
				break;
			t=p[++j]*i;
		}
	}
}

inline ll qp(ll a,ll b)
{
	ll ans=1,cnt=a;
	while(b)
	{
		if(b&1) ans=ans*cnt%mod;
		cnt=cnt*cnt%mod;
		b>>=1;
	}
	return ans;
}
inline void prework()
{
	shai();
	fac[0]=1;
	for(int i=1;i<maxl;i++)
		fac[i]=fac[i-1]*i%mod;
	inv[maxl-1]=qp(fac[maxl-1],mod-2);
	for(int i=maxl-2;i>=0;i--)
		inv[i]=inv[i+1]*(i+1)%mod;
	scanf("%d%d",&n,&m);
}


inline ll c(int n,int r)
{
	if(r>n || r<0) return 0;
	return fac[n]*inv[n-r]%mod*inv[r]%mod;
}
inline void add(ll &a,ll b){a=(a+b)%mod;}

inline void mainwork()
{
	dp[1]=1;ans=1;
	for(int i=2;i<=m;i++)
	{
		int x=i,d=dy[i],cnt=0;
		while(x%d==0 && x>1)
			cnt++,x/=d;
		dp[i]=dp[x]*c(cnt+n-1,n-1)%mod;
		add(ans,dp[i]);
	}
}

inline void print()
{
	printf("%lld\n",ans);
}

int main()
{
	prework();
	mainwork();
	print();
	return 0;
}
#include<bits/stdc++.h>
using namespace std;

int mod = 998244353;

long long fac[200005], finv[200005], inv[200005];

void COMinit(int m) {
    fac[0] = fac[1] = 1;
    finv[0] = finv[1] = 1;
    inv[1] = 1;
    for (int i = 2; i < 200005; i++){
        fac[i] = fac[i - 1] * i % m;
        inv[i] = m - inv[m % i] * (m / i) % m;
        finv[i] = finv[i - 1] * inv[i] % m;
    }
}

long long COM(int n, int k,int m){
    if (n < k) return 0;
    if (n < 0 || k < 0) return 0;
    return fac[n] * (finv[k] * finv[n - k] % m) % m;
}

long long dp[35][200005];

int main() {
    int N,M;
    cin >> N >> M;
    COMinit(mod);
    for(int i = 1; i <= M; i++) {
        dp[0][i] = 1;
    }
    for(int i = 0; i < 30; i++) {
        for(int j = 1; j <= M; j++) {
            for(int k = 2; j*k <= M; k++) {
                dp[i+1][j*k] += dp[i][j];
            }
        }
    }
    long long ans = 0;
    for(int i = 0; i < 30; i++) {
        long long sum = 0;
        for(int j = 1; j <= M; j++) {
            sum += dp[i][j];
        }
        ans += sum*COM(N-1,i,mod)%mod;
        ans %= mod;
    }
    cout << ans << endl;
}
