#include <bits/stdc++.h>
typedef long long ll;
#define rep(i,n) for(int i=0;i<n;i++)
using namespace std;
int p=998244353;
vector<int> a(200100);
vector<int> b(200100);
int powk(int k,int n){
	int ans=1,m=k;
	while(n){
		if(n%2) ans=1ll*ans*m%p;
    	m=1ll*m*m%p; n/=2;
  	}
  	return ans;
}
int comb(int n,int k){
	int ans=1ll*a[n]*b[n-k]%p*b[k]%p;
	return ans;
}
int main(){
	a[0]=1;
	for(int i=1;i<200020;i++) a[i]=1ll*a[i-1]*i%p;
	rep(i,200020) b[i]=powk(a[i],p-2);
	int n,m;
	cin>>n>>m;
	int ans=1;
	for(int i=2;i<=m;i++){
    	int j=i,x=2;int y=1;
    	while(x*x<=i){
      		int k=0;
      		while(j%x==0){
        		j/=x; k++;
      		}
      		y=1ll*y*comb(n+k-1,k)%p;
      		x++;
    	}
    	if(1<j) y=1ll*y*n%p;
    	ans=(ans+y)%p;
  	}
  	cout<<ans<<endl;
}
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
#define int ll

const int M = 998244353;

int rep(int x) {
  x %= M;
  if (x < 0) x += M;
  return x;
}

int add(int a, int b) {
  return rep(a + b);
}

int mul(int a, int b) {
  return rep(a * b);
}

int pw(int a, int b) {
  int r = 1;
  while (b) {
    if (b & 1) r = rep(r * a);
    a = rep(a * a);
    b /= 2;
  }
  return r;
}

int dv(int a, int b) {
  return rep(a * pw(b, M - 2));
}

const int N = (int) 2e5 + 7;
int n, len, dp[N][25], fact[N], ifact[N];

int comb(int n, int k) {
  if (k < 0 || k > n) return 0;
  return mul(fact[n], mul(ifact[k], ifact[n - k]));
}

signed main() {
  ios::sync_with_stdio(0); cin.tie(0);
  ///freopen ("input", "r", stdin);
  fact[0] = 1;
  for (int i = 1; i < N; i++) {
    fact[i] = mul(fact[i - 1], i);
  }
  ifact[N - 1] = dv(1, fact[N - 1]);
  for (int i = N - 2; i >= 0; i--) {
    ifact[i] = mul(ifact[i + 1], i + 1);
  }
  cin >> len >> n;
  for (int i = 1; i <= n; i++) {
    dp[i][1] = 1;
    for (int j = 1; j <= 20; j++) {
      if (dp[i][j]) {
        for (int k = 2 * i; k <= n; k += i) {
          dp[k][j + 1] = add(dp[k][j + 1], dp[i][j]);
        }
      }
    }
  }
  int ret = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= 20; j++) {
      if (!dp[i][j]) continue;
     /// cout << "last = " << i << ", cnt = " << j << " : " << comb(len, j) << " and " << dp[i][j] << "\n";
      ret = add(ret, mul(comb(len - 1, j - 1), dp[i][j]));
    }
  }
  cout << ret << "\n";
  return 0;
}
