#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define int long long #define rep(i, n) for(i = 0; i < n; i++) using namespace std; using namespace atcoder; using mint = modint998244353; int n, m; mint a[200000]; signed main() { int i; cin >> n >> m; rep(i, n) { int v; cin >> v; a[i] = v; } dsu uf(n); rep(i, m) { int u, v; cin >> u >> v; u--; v--; uf.merge(u, v); } auto gs = uf.groups(); mint ans = 1; for (auto g: gs) { mint s = 0; for (int v: g) { s += a[v]; } ans *= s.pow(g.size()); } cout << ans.val() << endl; return 0; }