#include<bits/stdc++.h> #define re register #define int long long #define Mul(a,b) (((a) % mod) * ((b) % mod) % mod)
usingnamespace std;
constint N = 1e6 + 10,mod = 998244353; int n,k,ans = 1; int cnt[N]; bool vis[N]; vector<int> v,p; unordered_map<int,int> num;
inlineintread(){ int r = 0,w = 1; char c = getchar(); while (c < '0' || c > '9'){ if (c == '-') w = -1; c = getchar(); } while (c >= '0' && c <= '9'){ r = (r << 3) + (r << 1) + (c ^ 48); c = getchar(); } return r * w; }
inlinevoidinit(){ vis[1] = true; for (re int i = 2;i <= 1e6;i++){ if (!vis[i]){ p.push_back(i); if (i <= k) cnt[i]--; for (re int j = 2;i * j <= 1e6;j++){ vis[i * j] = true; int x = i * j,tot = 0; if (x <= k){ while (x % i == 0) x /= i,tot++; cnt[i] -= tot; } } } } }
signedmain(){ n = read(),k = read(); init(); for (re int i = 1;i <= k;i++) v.push_back(n - i + 1); if (v.empty()) goto End;// 特判,不然会 RE for (auto x:p){ int t = n - (n / x) * x; for (re int i = t;i < v.size();i += x){ int tot = 0; while (v[i] % x == 0) v[i] /= x,tot++; cnt[x] += tot; } } for (auto x:v){ if (x != 1) num[x]++; } for (auto x:v){ ans = Mul(ans,num[x] + 1); num[x] = 0; } End:; for (re int i = 1;i <= 1e6;i++) ans = Mul(ans,cnt[i] + 1); printf("%lld",ans); return0; }