import sys sys.setrecursionlimit(10**6) N, M = map(int, input().split()) A = list(map(int, input().split())) UV = [list(map(int, input().split())) for _ in range(M)] MOD = 998244353 G = [[] for _ in range(N)] for i in range(M): u, v = UV[i] u -= 1 v -= 1 G[u].append(v) G[v].append(u) link = [-1] * N def dfs(now): for nxt in G[now]: if link[now] == link[nxt]: continue link[nxt] = link[now] dfs(nxt) cnt = 0 for i in range(N): if link[i] != -1: continue cnt += 1 link[i] = cnt dfs(i) a = [[0] * 2 for _ in range(cnt)] for i in range(N): a[link[i]-1][0] += A[i] a[link[i]-1][1] += 1 ans = 1 for x, y in a: ans *= x ** y ans %= MOD print(ans)