//Saturday 25-September-2021 00:11:13
#include <bits/stdc++.h>
//@ReetuRaj77
#define int long long int
#define ulli unsigned long long int
#define all(x) (x).begin(),(x).end()
#define fastio ios_base::sync_with_stdio(false);cin.tie(nullptr)
using namespace std;
vector<int>component;
vector<bool>used;
stack<int>order;
void dfs1(int source, vector<int>adj[]) {
used[source] = true;
for (auto v : adj[source]) {
if (used[v] == false)
dfs1(v, adj);
}
order.push(source);
}
void dfs2(int source, vector<int>adj_rev[]) {
used[source] = true;
component.push_back(source);
for (auto v : adj_rev[source])
if (!used[v])
dfs2(v, adj_rev);
}
signed main() {
fastio;
int n, m;
cin >> n >> m;
vector<int>values(n);
for (auto&x : values)cin >> x;
used.resize(n + 1, false);
vector<int>adj[n + 1], adj_rev[n + 1];
for (int i = 0; i < m; i++) {
int x, y;
cin >> x >> y;
adj[x].push_back(y);
adj_rev[y].push_back(x);
}
for (int i = 1; i < n + 1; i++) {
if (used[i] == false) {
dfs1(i, adj);
}
}
used.assign(n + 1, false);
vector<int>roots(n + 1), root_nodes;
vector<int>sums(n + 1);
while (!order.empty()) {
int i = order.top();
order.pop();
if (!used[i]) {
dfs2(i, adj_rev);
int root = component.front();
int sum = 0;
for (auto u : component) {
roots[u] = root;
sum += values[u - 1];
}
sums[root] = sum;
root_nodes.push_back(root);
}
component.clear();
}
//adjacency matrix of condensation graph.
vector<int>adj_scc[n + 1];
for (int i = 1; i < n + 1; i++) {
for (auto x : adj[i]) {
int root_source = roots[i];
int root_destination = roots[x];
if (root_destination != root_source)
adj_scc[root_source].push_back(root_destination);
}
}
reverse(all(root_nodes));
for (auto x : root_nodes) {
int val = sums[x];
for (auto v : adj_scc[x]) {
val = max(val, sums[x] + sums[v]);
}
sums[x] = val;
}
cout << *max_element(all(sums)) << endl;
return 0;
}
Ly9TYXR1cmRheSAyNS1TZXB0ZW1iZXItMjAyMSAwMDoxMToxMwojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KLy9AUmVldHVSYWo3NwojZGVmaW5lIGludCBsb25nIGxvbmcgaW50CiNkZWZpbmUgdWxsaSB1bnNpZ25lZCBsb25nIGxvbmcgaW50CiAKI2RlZmluZSBhbGwoeCkgKHgpLmJlZ2luKCksKHgpLmVuZCgpCiAKI2RlZmluZSBmYXN0aW8gaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7Y2luLnRpZShudWxscHRyKQogCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKdmVjdG9yPGludD5jb21wb25lbnQ7CnZlY3Rvcjxib29sPnVzZWQ7CnN0YWNrPGludD5vcmRlcjsKIAp2b2lkIGRmczEoaW50IHNvdXJjZSwgdmVjdG9yPGludD5hZGpbXSkgewoJdXNlZFtzb3VyY2VdID0gdHJ1ZTsKCWZvciAoYXV0byB2IDogYWRqW3NvdXJjZV0pIHsKCQlpZiAodXNlZFt2XSA9PSBmYWxzZSkKCQkJZGZzMSh2LCBhZGopOwoJfQoJb3JkZXIucHVzaChzb3VyY2UpOwp9CnZvaWQgZGZzMihpbnQgc291cmNlLCB2ZWN0b3I8aW50PmFkal9yZXZbXSkgewoJdXNlZFtzb3VyY2VdID0gdHJ1ZTsKCWNvbXBvbmVudC5wdXNoX2JhY2soc291cmNlKTsKCWZvciAoYXV0byB2IDogYWRqX3Jldltzb3VyY2VdKQoJCWlmICghdXNlZFt2XSkKCQkJZGZzMih2LCBhZGpfcmV2KTsKfQpzaWduZWQgbWFpbigpIHsKCWZhc3RpbzsKCWludCBuLCBtOwoJY2luID4+IG4gPj4gbTsKCXZlY3RvcjxpbnQ+dmFsdWVzKG4pOwoJZm9yIChhdXRvJnggOiB2YWx1ZXMpY2luID4+IHg7Cgl1c2VkLnJlc2l6ZShuICsgMSwgZmFsc2UpOwoJdmVjdG9yPGludD5hZGpbbiArIDFdLCBhZGpfcmV2W24gKyAxXTsKCWZvciAoaW50IGkgPSAwOyBpIDwgbTsgaSsrKSB7CgkJaW50IHgsIHk7CgkJY2luID4+IHggPj4geTsKCQlhZGpbeF0ucHVzaF9iYWNrKHkpOwoJCWFkal9yZXZbeV0ucHVzaF9iYWNrKHgpOwoJfQoJZm9yIChpbnQgaSA9IDE7IGkgPCBuICsgMTsgaSsrKSB7CgkJaWYgKHVzZWRbaV0gPT0gZmFsc2UpIHsKCQkJZGZzMShpLCBhZGopOwoJCX0KCX0KCXVzZWQuYXNzaWduKG4gKyAxLCBmYWxzZSk7Cgl2ZWN0b3I8aW50PnJvb3RzKG4gKyAxKSwgcm9vdF9ub2RlczsKCXZlY3RvcjxpbnQ+c3VtcyhuICsgMSk7Cgl3aGlsZSAoIW9yZGVyLmVtcHR5KCkpIHsKCQlpbnQgaSA9IG9yZGVyLnRvcCgpOwoJCW9yZGVyLnBvcCgpOwoJCWlmICghdXNlZFtpXSkgewoJCQlkZnMyKGksIGFkal9yZXYpOwoJCQlpbnQgcm9vdCA9IGNvbXBvbmVudC5mcm9udCgpOwoJCQlpbnQgc3VtID0gMDsKCQkJZm9yIChhdXRvIHUgOiBjb21wb25lbnQpIHsKCQkJCXJvb3RzW3VdID0gcm9vdDsKCQkJCXN1bSArPSB2YWx1ZXNbdSAtIDFdOwoJCQl9CgkJCXN1bXNbcm9vdF0gPSBzdW07CgkJCXJvb3Rfbm9kZXMucHVzaF9iYWNrKHJvb3QpOwoJCX0KCQljb21wb25lbnQuY2xlYXIoKTsKCX0KCS8vYWRqYWNlbmN5IG1hdHJpeCBvZiBjb25kZW5zYXRpb24gZ3JhcGguCgl2ZWN0b3I8aW50PmFkal9zY2NbbiArIDFdOwoJZm9yIChpbnQgaSA9IDE7IGkgPCBuICsgMTsgaSsrKSB7CgkJZm9yIChhdXRvIHggOiBhZGpbaV0pIHsKCQkJaW50IHJvb3Rfc291cmNlID0gcm9vdHNbaV07CgkJCWludCByb290X2Rlc3RpbmF0aW9uID0gcm9vdHNbeF07CgkJCWlmIChyb290X2Rlc3RpbmF0aW9uICE9IHJvb3Rfc291cmNlKQoJCQkJYWRqX3NjY1tyb290X3NvdXJjZV0ucHVzaF9iYWNrKHJvb3RfZGVzdGluYXRpb24pOwoJCX0KCX0KCXJldmVyc2UoYWxsKHJvb3Rfbm9kZXMpKTsKCWZvciAoYXV0byB4IDogcm9vdF9ub2RlcykgewoJCWludCB2YWwgPSBzdW1zW3hdOwoJCWZvciAoYXV0byB2IDogYWRqX3NjY1t4XSkgewoJCQl2YWwgPSBtYXgodmFsLCBzdW1zW3hdICsgc3Vtc1t2XSk7CgkJfQoJCXN1bXNbeF0gPSB2YWw7Cgl9Cgljb3V0IDw8ICptYXhfZWxlbWVudChhbGwoc3VtcykpIDw8IGVuZGw7CglyZXR1cm4gMDsKfQ==