#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
#define pb push_back
#define eb emplace_back
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
#define el '\n'
using pii = pair<int,int>;
using vi = vector<int>;
const int N = 2e5 + 5;
const int INF = 1e16;
const int MOD = 1e9 + 7;
void fastIO() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
}
int a[N], b[N];
struct Node{
int dp[3][3];
// dp[đầu][cuối]
// 0: (-) 1: (+) 2: (0)
Node(){
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
dp[i][j] = -INF;
}
}
}
}st[4*N];
void set_node(int id, int val) {
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
st[id].dp[i][j] = -INF;
}
}
st[id].dp[2][2] = 0;
if(val > 0) st[id].dp[1][1] = val;
if(val < 0) st[id].dp[0][0] = -val;
}
Node merge(const Node& L, const Node& R) {
Node res;
for (int i = 0; i < 3; i++) { // đầu trái
for (int j = 0; j < 3; j++) { // cuối phải
for (int k = 0; k < 3; k++) { // cuối trái
for (int l = 0; l < 3; l++) { // đầu phải
if ((k == 0 && l == 1) || (k == 1 && l == 0)) continue;
if (L.dp[i][k] != -INF && R.dp[l][j] != -INF) {
res.dp[i][j] = max(res.dp[i][j], L.dp[i][k] + R.dp[l][j]);
}
}
}
}
}
return res;
}
void build(int id, int l, int r) {
if (l == r) {
set_node(id, b[l]);
return;
}
int mid = (l + r) / 2;
build(2 * id, l, mid);
build(2 * id + 1, mid + 1, r);
st[id] = merge(st[2 * id], st[2 * id + 1]);
}
void update(int id, int l, int r, int idx, int val) {
if (l == r) {
b[l] += val;
set_node(id, b[l]);
return;
}
int mid = (l + r) / 2;
if (idx <= mid) update(2 * id, l, mid, idx, val);
else update(2 * id + 1, mid + 1, r, idx, val);
st[id] = merge(st[2 * id], st[2 * id + 1]);
}
signed main() {
fastIO();
#define task "a"
//freopen(task".inp","r",stdin);
//freopen(task".out","w",stdout);
int n, q; cin >> n >> q;
for(int i = 1; i <= n; i++){
cin >> a[i];
}
for(int i = 2; i <= n; i++){
b[i-1] = a[i] - a[i-1];
}
build(1, 1, n-1);
while(q--){
int l, r, x; cin >> l >> r >> x;
if (l > 1) update(1, 1, n - 1, l - 1, x);
if (r < n) update(1, 1, n - 1, r, -x);
int ans = 0;
for (int i = 0; i < 3; i++){
for (int j = 0; j < 3; j++){
ans = max(ans, st[1].dp[i][j]);
}
}
cout << ans << el;
}
return 0;
}
// Yêu Linh Đan hơn yêu code