#include <bits/stdc++.h>
using namespace std;
const long long int M = 2e5 + 5, LG = 30, inf = 1e18, mod = 1e9 + 7;
long long int n, m;
long long int seg[4 * M], lzy[4 * M];
long long int cst[M];
vector<pair<long long int, long long int> > baze[M];
void lzyupd(long long int id, long long int v) {
  seg[id] += v;
  lzy[id] += v;
}
void lzyref(long long int id) {
  lzyupd(2 * id, lzy[id]);
  lzyupd(2 * id + 1, lzy[id]);
  lzy[id] = 0;
}
void updb(long long int x, long long int y, long long int v,
          long long int l = 0, long long int r = n, long long int id = 1) {
  if (x <= l && r <= y) {
    lzyupd(id, v);
    return;
  }
  if (y <= l || r <= x) return;
  lzyref(id);
  long long int mid = (l + r) >> 1;
  updb(x, y, v, l, mid, 2 * id);
  updb(x, y, v, mid, r, 2 * id + 1);
  seg[id] = max(seg[2 * id], seg[2 * id + 1]);
}
void updp(long long int p, long long int v, long long int l = 0,
          long long int r = n, long long int id = 1) {
  if (l + 1 == r) {
    seg[id] = v;
    return;
  }
  lzyref(id);
  long long int mid = (l + r) >> 1;
  if (p < mid)
    updp(p, v, l, mid, 2 * id);
  else
    updp(p, v, mid, r, 2 * id + 1);
  seg[id] = max(seg[2 * id], seg[2 * id + 1]);
}
int main() {
  ios::sync_with_stdio(0);
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    cin >> cst[i];
  }
  for (int i = 0; i < m; i++) {
    long long int l, r, x;
    cin >> l >> r >> x;
    l--;
    baze[r].push_back({l, x});
  }
  long long int pv = 0;
  n++;
  for (int i = 1; i < n; i++) {
    for (pair<long long int, long long int> s : baze[i]) {
      updb(0, s.first + 1, s.second);
    }
    updb(0, i, -cst[i - 1]);
    pv = max(pv, seg[1]);
    updp(i, pv);
  }
  cout << seg[1] << '\n';
}
