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

typedef long long ll;

typedef pair<int, int> pii;
typedef pair<ll, int> pli;
typedef pair<ll, ll> pll;

#define mp make_pair
#define fr first
#define sc second

int lg(ll n) {
    assert(n > 0);
    int ans = -1;
    while (n) {
        ans++;
        n >>= 1;
    }
    return ans;
}

template <int mod_>
struct modint {
    static const int mod = mod_;
    int val;
    modint() { val = 0; }
    modint(const ll& v) {
        val = (-mod <= v && v < mod) ? v : v % mod;
        if (val < 0) val += mod;
    }
    friend ostream& operator<<(ostream& os, const modint& a) {
        return os << a.val;
    }
    friend bool operator==(const modint& a, const modint& b) {
        return a.val == b.val;
    }
    friend bool operator!=(const modint& a, const modint& b) {
        return !(a == b);
    }
    friend bool operator<(const modint& a, const modint& b) {
        return a.val < b.val;
    }

    modint operator-() const { return modint(-val); }
    modint& operator+=(const modint& m) {
        if ((val += m.val) >= mod) val -= mod;
        return *this;
    }
    modint& operator-=(const modint& m) {
        if ((val -= m.val) < 0) val += mod;
        return *this;
    }
    modint& operator*=(const modint& m) {
        val = (ll)val * m.val % mod;
        return *this;
    }

    modint qpow(ll p) {
        modint ans = 1, base = val;
        for (; p; p /= 2, base *= base)
            if (p & 1) ans *= base;
        return ans;
    }
    modint inv() {
        assert(val);
        return qpow((ll)mod - 2);
    }
    modint& operator/=(modint m) { return (*this) *= m.inv(); }

    friend modint operator+(modint a, const modint& b) { return a += b; }
    friend modint operator-(modint a, const modint& b) { return a -= b; }
    friend modint operator*(modint a, const modint& b) { return a *= b; }
    friend modint operator/(modint a, const modint& b) { return a /= b; }
    operator ll() const { return val; }
};
using mint = modint<998244353>;

const int MX_sieve = 2e5;
int par[MX_sieve + 5];
vector<int> pri;  // par is the lowest prime factor
int pricnt = (int)pri.size();
map<int, int> primeidx;
void sieve() {
    for (int i = 1; i <= MX_sieve; i++) {
        if (i == 1)
            continue;
        else {
            if (!par[i]) {
                pri.push_back(i);
                par[i] = i;
            }
            for (int x : pri) {
                if (x > MX_sieve / i) break;
                par[x * i] = x;
                if (x == par[i]) {
                    break;
                }
            }
        }
    }
    int pricnt = (int)pri.size();
    /*
    for (int i = 0; i < pricnt; i++) {
        primeidx[pri[i]] = i;
    }
    */
}

// need mint

const int MX_fact = 2e5 + 500;
mint fact[MX_fact + 5], invfact[MX_fact + 5];
void prepare_fact() {
    fact[0] = 1;
    invfact[0] = 1;
    for (int i = 0; i < MX_fact; i++) {
        fact[i + 1] = fact[i] * mint(i + 1);
        invfact[i + 1] = fact[i + 1].inv();
    }
}
mint C(int n, int k) {
    if (k < 0 || k > n) return 0;
    return fact[n] * invfact[k] * invfact[n - k];
}
mint H(int n, int k) { return C(n + k - 1, n - 1); }

void solve() {
    int N, M;
    cin >> N >> M;
    mint ans = 0;
    for (int i = 1; i <= M; i++) {
        mint comb = 1;
        int reg = i;
        while (reg > 1) {
            int p = par[reg], pw = 0;
            while (par[reg] == p) {
                pw++;
                reg /= p;
            }
            comb *= C(N - 1 + pw, pw);
        }
        ans += comb;
    }
    cout << ans << '\n';
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
#ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
#endif

    sieve();
    prepare_fact();
    int t = 1;
    // cin >> t;
    while (t--) solve();

    return 0;
}

#include <bits/stdc++.h> 
using namespace std;
using ll = long long; 
#define rep(i, n) for (int i = 0; i < (int)(n); i++)

int main(){
    // 初期値
    // nが階数、kが1階ごとの部屋数
    int n, k;
    int count=0;

    // 入力
    cin >> n >> k;

    // 処理
    for(int i=1; i<=n; i++){
        for(int j=1; j<=k; j++){
            count += (100*i) + (1*j);
        }
    }

    // 出力
    cout << count << endl;
}