#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using ll = long long; int main(){ ll N, M, X, Y, ans; cin >> N >> M; vector H(N); for (int i=0; i> H[i]; vector> E(N); for (int i=0; i> X >> Y; X--; Y--; E[X].push_back(Y); E[Y].push_back(X); } vector> dp(N, vector(2, -1e18)), dp2(N, vector(2, -1e18)); dp[0][0] = 0; dp2[N-1][0] = 0; for (int i=1; i H[i] && k < i) dp[i][0] = max({dp[i][0], dp[k][0], dp[k][1]}); if (H[k] < H[i] && k < i) dp[i][1] = max(dp[i][1], dp[k][0]+H[i]-H[k]); } } ans = max(dp[N-1][0], dp[N-1][1]); if (ans == -1e18) ans = -1; cout << ans << endl; for (int i=N-1; i>=0; i--){ for (auto k : E[i]){ if (H[k] > H[i] && k > i) dp2[i][0] = max({dp2[i][0], dp2[k][0], dp2[k][1]}); if (H[k] < H[i] && k > i) dp2[i][1] = max(dp2[i][1], dp2[k][0]+H[i]-H[k]); } } ans = max(dp2[0][0], dp2[0][1]); if (ans < 0) ans = -1; cout << ans << endl; return 0; }