#include <bits/stdc++.h>
using ll = long long;
using namespace std;
class segtree {
public:
std::vector<ll> seg;
ll n;
segtree(ll n) : n(n), seg(4 * n) {}
void set(ll v, ll l, ll r, ll idx, ll del) {
if (idx < l or idx > r) {
return;
}
if (l == r) {
seg[v] = del;
return;
}
ll m = l + (r - l) / 2;
set(2 * v, l, m, idx, del);
set(2 * v + 1, m + 1, r, idx, del);
seg[v] = max(seg[2 * v], seg[2 * v + 1]);
}
void set(ll idx, ll del) {
set(1, 0, n - 1, idx, del);
}
ll q(ll v, ll l, ll r, ll ql, ll qr) {
if (qr < l or ql > r) {
return 0;
}
if (ql <= l and r <= qr) {
return seg[v];
}
ll m = l + (r - l) / 2;
return max(q(2 * v, l, m, ql, qr), q(2 * v + 1, m + 1, r, ql, qr));
}
ll q(ll ql, ll qr) {
return q(1, 0, n - 1, ql, qr);
}
};
int main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
ll n, m;
cin >> n >> m;
vector<ll> a(n);
ll maxx = 0;
ll idx = 0;
for (int i = 0; i < n; i++) {
cin >> a[i];
if (a[i] >= maxx) {
maxx = a[i];
idx = i;
}
}
for (int i = 0; i < m; i++) {
ll u, v;
cin >> u >> v;
}
vector<ll> need(n);
segtree st(n);
for (int i = n - 1; i >= 0; i--) {
if (i == n - 1)
need[i] = a[i];
else
need[i] = max(need[i + 1] - 1, a[i]);
st.set(i, need[i]);
}
ll ans = 0;
ll t = 0;
for (int i = 1; i < n; i++) {
if (i < idx) {
if (ans < a[i]) {
t += max(1LL, a[i] - ans);
ans = a[i];
} else if (ans + 1 <= maxx) {
t++;
ans++;
} else if (ans - 1 >= maxx) {
ans--;
t++;
} else {
t++;
}
} else if (i > idx) {
if (st.q(i, n - 1) >= ans) {
t++;
} else {
t++;
ans--;
}
}
if (i == idx) {
if (ans <= a[i]) {
t += max(1LL, a[i] - ans);
ans = a[i];
} else {
t++;
ans--;
}
}
}
if (ans != 0) {
t += ans;
}
cout << t << "\n";
return 0;
}