#include #include using namespace std; using namespace atcoder; struct Fast { Fast() { std::cin.tie(nullptr); ios::sync_with_stdio(false); cout << setprecision(10); } } fast; #define rep(i, a, b) for (int(i) = (a); (i) < (int)(b); (i)++) using mint = modint998244353; int main() { int n, m; cin >> n >> m; vector a(n); rep(i, 0, n) cin >> a[i]; dsu uf(n); rep(i, 0, m) { int u, v; cin >> u >> v; u--; v--; uf.merge(u, v); } vector sum(n, 0); rep(i, 0, n) sum[uf.leader(i)] += a[i]; mint ans = 1; rep(i, 0, n) { if (i != uf.leader(i)) continue; int sz = uf.size(i); rep(j, 0, sz) ans *= sum[i]; } cout << ans.val() << endl; }