def oi(): return int(input()) def os(): return input() def mi(): return list(map(int, input().split())) # import sys # input = sys.stdin.readline # import sys # sys.setrecursionlimit(10**8) # import pypyjit # pypyjit.set_param('max_unroll_recursion=-1') input_count = 0 input_count = 0 N,M = mi() mod = 998244353 def cmb(n, r, mod): if ( r<0 or r>n ): return 0 r = min(r, n-r) return (g1[n] * g2[r])%mod * g2[n-r] % mod CN = 10**6 g1 = [1, 1] # 元テーブル g2 = [1, 1] #逆元テーブル inverse = [0, 1] #逆元テーブル計算用テーブル for i in range( 2, CN + 1 ): g1.append( ( g1[-1] * i ) % mod ) inverse.append( ( -inverse[mod % i] * (mod//i) ) % mod ) g2.append( (g2[-1] * inverse[-1]) % mod ) prd = 1 NOKORI = M d = M//N amari = M%N for _ in range(N): if amari>0: prd = (prd * cmb(NOKORI , d+1, mod))%mod amari -= 1 NOKORI -= 1 else: prd = (prd * cmb(NOKORI , d, mod))%mod NOKORI -= d print(prd)