#include #include #include using namespace std; using namespace atcoder; using mint = modint998244353; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf32 1000000001 #define Inf64 4000000000000000001LL //[[l,r],v] l<=x<=rは, floor(N/x)=v vector,long long>> get_floor(long long N){ vector,long long>> ret; for(long long i=1;i<=N;i++){ long long v = N/i; ret.emplace_back(make_pair(i,0),v); i = N/v; ret.back().first.second = i; } return ret; } mint sum(long long n){ mint ret = n; ret *= n+1; ret /= 2; return ret; } mint sum(long long l,long long r){ return sum(r) - sum(l-1); } int main(){ long long N,M; cin>>N>>M; auto ret = get_floor(M); mint ans = M; ans *= N; rep(i,ret.size()){ long long l = ret[i].first.first; long long r = ret[i].first.second; r = min(r,N); if(l>r)continue; long long v = ret[i].second; mint t= sum(l,r); ans -= t * v; } cout<