#include using namespace std; int main(){ long n,m; cin>>n>>m; long h[n]; for(int i=0;i>h[i],h[i]--; vector G; for(int i=0;i>u>>v; u--;v--; if(h[u]>h[v]) swap(u,v); G.push_back(h[u]*n*n+u*n+v); } sort(G.begin(),G.end()); vector dp(2*n,-n); dp[0]=dp[2*n-1]=1; long ans=0; for(long x:G){ long u=x/n%n,v=x%n; dp[v]=max(dp[v],dp[u]+1); dp[v+n]=max(dp[v+n],dp[u+n]+1); ans=max(ans,dp[v]+dp[v+n]); } cout<