MOD = 998244353 class DSU: def __init__(self, n): self.par = [v for v in range(n)] self.cc_odr = [1] * n self.cc_sum = list(map(int, input().split())) def root(self, v): if self.par[v] != v: self.par[v] = self.root(self.par[v]) return self.par[v] def unite(self, u, v): u, v = map(self.root, [u, v]) if u == v: return if self.cc_odr[u] > self.cc_odr[v]: u, v = v, u self.par[u] = v self.cc_odr[v] += self.cc_odr[u] self.cc_sum[v] += self.cc_sum[u] self.cc_sum[v] %= MOD def is_same(self, u, v): return self.root(u) == self.root(v) def cc_order(self, v): return self.cc_odr[self.root(v)] def cc_total(self, v): return self.cc_sum[self.root(v)] N, M = map(int, input().split()) G = DSU(N) for j in range(M): U, V = map(int, input().split()) G.unite(U-1, V-1) ans = 1 for i in range(N): ans *= G.cc_total(i) ans %= MOD print(ans)