############################################################### #https://atcoder.jp/contests/abc249/submissions/71937223 import math def smallest_prime_facror(n): res=list(range(n+1)) for i in range(2,int(math.isqrt(n))+1): if res[i]==i: for j in range(i*i,n+1,i): if res[j]==j: res[j]=i return res spf=smallest_prime_facror(10000000) def prime_factorization(n): factors={} current=n while current>1: factors[spf[current]]=factors.get(spf[current],0)+1 current//=spf[current] return factors def divisors(n): factors=prime_factorization(n) divs=[1] for p,e in factors.items(): m=len(divs) mul=1 for _ in range(e): mul*=p for i in range(m): divs.append(divs[i]*mul) return divs ############################################################### N,M=map(int,input().split()) meb=[0]*(10000001) meb[1]=1 mod=998244353 inv=pow(4,-1,mod) ans=N*M*(N+1)*(M+1)*inv%mod for d in range(2,min(N,M)+1): p=spf[d] if d%(p*p)==0: meb[d]=0 continue m=-meb[d//p] nd=N//d md=M//d ad=m*d*d*nd*md*(nd+1)*(md+1)*inv%mod ans+=ad ans%=mod meb[d]=m print(ans)