AC × 58
WA × 37
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll n, m, a[200005], fa[200005], in[200005], ans[200005], u, v;
vector <ll> e[200005];
vector <pair <ll, ll> > rec;
queue <ll> q;
ll find(ll now)
{
if (fa[now] == now) return now;
return fa[now] = find(fa[now]);
}
void Union(ll ta, ll tb)
{
ll ka = find(ta), kb = find(tb);
if (ka != kb) fa[ka] = kb;
}
int main()
{
cin >> n >> m;
for (ll i = 1; i <= n; i++) cin >> a[i], fa[i] = i;
while (m--)
{
cin >> u >> v;
if (a[u] == a[v]) Union(u, v);
else if (a[u] < a[v]) rec.push_back(make_pair(u, v));
else rec.push_back(make_pair(v, u));
}
for (pair <ll, ll> i : rec) e[find(i.first)].push_back(find(i.second)), in[find(i.second)]++;
ans[find(1)] = 1;
q.push(find(1));
for (ll i = 2; i <= n; i++) if (fa[i] == i && !in[i]) q.push(i);
while (q.size())
{
ll num = q.front();
q.pop();
for (ll i = 0; i < e[num].size(); i++)
{
ll nxt = e[num][i];
ans[nxt] = max(ans[nxt], ans[num] + 1);
in[nxt]--;
if (!in[nxt]) q.push(nxt);
}
}
cout << ans[find(n)];
}