#include <algorithm>
#include <iostream>
#include <iomanip>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <unordered_map>
#include <vector>
#define all(x) x.begin(), x.end()
#define pb push_back
#define eb emplace_back
#define l first
#define r second
#define pi pair<int, int>

using namespace std;

const int maxn = 5e7 + 1, mod = 998244353;

int f[maxn], ivf[maxn], cnk[maxn];

int bp(int a, int n) {
    if (!n) {
        return 1;
    }
    if (n % 2) {
        return (a * 1ll * bp(a, n - 1)) % mod;
    }
    return bp(a * 1ll * a % mod, n / 2);
}

int n, c;
int ans = 0;
//// АНДРЕЙ САНСТРАЙК
void calc(int x, int k, int ls, int lc = 0, int mul = 1) {
    ans = (ans + cnk[k] * ((f[k] * 1ll * (mul * 1ll * ivf[lc] % mod)) % mod)) % mod;
    for (int64_t i = ls; i * x <= c; i++) {
        calc(x * i, k + 1, i, (i == ls ? lc + 1 : 1), (i == ls ? mul : mul * 1ll * ivf[lc] % mod));
    }
}

int32_t main() {
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    cin >> n >> c;
    f[0] = 1;
    for (int64_t i = 1; i < maxn; i++) {
        f[i] = (f[i - 1] * i) % mod;
    }
    ivf[maxn - 1] = bp(f[maxn - 1], mod - 2);
    for (int64_t i = maxn - 2; i >= 0; i--) {
        ivf[i] = (ivf[i + 1] * (i + 1)) % mod;
    }
    for (int i = 0; i <= 26; i++) {
        if (n < i) {
            break;
        }
        cnk[i] = ((f[n] * 1ll * ivf[i]) % mod * ivf[n - i]) % mod;
    }
    calc(1, 0, 2);
    cout << ans << '\n';
    return 0;
}
