#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 1e6 + 5;
int a[maxn], d[maxn];
struct node{
int f[2][2], l, r;
node(){memset(f, -60, sizeof(f));}
void init(int x){
f[0][0] = 0;
f[1][1] = abs(x);
f[0][1] = f[1][0] = -1e15;
l = r = (x < 0 ? -1 : (x > 0 ? 1 : 0));
}
int get(){
return max({f[0][0], f[0][1], f[1][0], f[1][1]});
}
} st[4 * maxn];
node merge(node ll, node rr){
node ans;
ans.l = ll.l, ans.r = rr.r;
for(int x: {0, 1}){
for(int y: {0, 1}){
for(int i: {0, 1}){
for(int j: {0, 1}) if(i + j != 2) ans.f[x][y] = max(ans.f[x][y], ll.f[x][i] + rr.f[j][y]);
}
if(ll.r * rr.l >= 0) ans.f[x][y] = max(ans.f[x][y], ll.f[x][1] + rr.f[1][y]);
}
}
return ans;
}
void update(int r, int pos, int val){
int l = 1, id = 1;
while(l < r){
int mid = (l + r) / 2;
if(pos <= mid) r = mid, id = id * 2;
else l = mid + 1, id = id * 2 + 1;
}
st[id].init(d[pos]);
while(id > 1){
id /= 2;
st[id] = merge(st[id * 2], st[id * 2 + 1]);
}
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n, q; cin >> n >> q;
for(int i = 1; i <= n; i++) cin >> a[i];
for(int i = 1; i < n; i++){
d[i] = a[i + 1] - a[i];
update(n - 1, i, d[i]);
}
while(q--){
int l, r, x; cin >> l >> r >> x;
d[l - 1] += x;
d[r] -= x;
if(2 <= l) update(n - 1, l - 1, d[l - 1]);
if(r < n) update(n - 1, r, d[r]);
cout << st[1].get() << "\n";
}
}