from math import lcm, gcd, isqrt def divisor(n): ans = [] for i in range(1, int(n**0.5)+1): if n % i == 0: ans.append(i) if i*i != n: ans.append(n//i) return sorted(ans) def factorization(n): arr = [] temp = n for i in range(2, isqrt(n)+1): if temp%i == 0: cnt = 0 while temp%i == 0: cnt += 1 temp //= i arr.append([i, cnt]) if temp != 1: arr.append([temp, 1]) if arr == []: arr.append([n, 1]) return arr def inverse(n, d): return n * pow(d, -1, MOD) % MOD MOD = 998244353 N, M = map(int, input().split()) A = list(map(int, input().split())) LCM = 1 for a in A: LCM = lcm(LCM, a) div = divisor(LCM) fact = factorization(LCM) IDX = dict() for i, d in enumerate(div): IDX[d] = i POW = [] for d in div: POW.append(pow(M, d, MOD)) mobius = [] for d in div: if d == 1: mobius.append(1) continue cnt = 0 for n, c in fact: if d%(n*n) == 0: mobius.append(0) break if d%n == 0: cnt ^= 1 else: mobius.append((-1)*cnt) dp = [] for d in div: SUM = 1 for a in A: SUM *= POW[IDX[gcd(a, d)]] SUM %= MOD dp.append(SUM) for n, _ in fact: for i in reversed(range(len(dp))): if div[i]%n == 0: dp[i] -= dp[IDX[div[i]//n]] dp[i] %= MOD for i in range(len(dp)): dp[i] *= LCM//div[i] dp[i] %= MOD print(inverse(sum(dp)%MOD, LCM))