def bin(N): X=[] while N: X.append(N%2) N//=2 return X def num(X): N=0 for x in X[::-1]: N=2*N+x return N def greedy(N,M): X=0 for _ in range(M): X^=N N<<=1 return X%Mod def solve(N,M): if N==0: return 0 b=bin(N) Mod=998244353 if M<=len(b): return greedy(N,M)%Mod b_inv=b[::-1] c=[0]*len(b); d=[0]*len(b) for i in range(len(b)): if i==0: c[i]=b[i] d[i]=b_inv[i] else: c[i]=c[i-1]^b[i] d[i]=d[i-1]^b_inv[i] d=d[::-1] t=M-1-len(b) X=num(d)*pow(2,t+len(b),Mod)+c[-1]*(pow(2,t,Mod)-1)*pow(2,len(b),Mod)+num(c) return X%Mod N,M=map(int,input().split()) Mod=998244353 print(solve(N,M))