#include <bits/stdc++.h>
using namespace std;
class segm_tree {
  vector<long long> tr, tradd;
  int off;
  void norm(int v) {
    if (!tradd[v]) return;
    if (v < off) {
      tradd[2 * v] += tradd[v];
      tradd[2 * v + 1] += tradd[v];
    }
    tr[v] += tradd[v];
    tradd[v] = 0;
  }
  int lr, rr;
  long long vr;
  void _add(int v, int lt, int rt) {
    if (rt < lr || rr < lt) return;
    norm(v);
    if (lr <= lt && rt <= rr) {
      tradd[v] += vr;
      return;
    }
    int mt = (lt + rt) / 2;
    _add(2 * v, lt, mt);
    _add(2 * v + 1, mt + 1, rt);
    norm(2 * v);
    norm(2 * v + 1);
    tr[v] = max(tr[2 * v], tr[2 * v + 1]);
  }
  long long _get(int v, int lt, int rt) {
    if (rt < lr || rr < lt) return 0;
    norm(v);
    if (lr <= lt && rt <= rr) return tr[v];
    int mt = (lt + rt) / 2;
    return max(_get(2 * v, lt, mt), _get(2 * v + 1, mt + 1, rt));
  }

 public:
  segm_tree(int _n) {
    off = 1;
    while (off < _n) off <<= 1;
    tr = vector<long long>(2 * off, 0);
    tradd = vector<long long>(2 * off, 0);
  }
  void add(int _lr, int _rr, long long _vr) {
    lr = _lr;
    rr = _rr;
    vr = _vr;
    _add(1, 0, off - 1);
  }
  long long getMax(int _lr, int _rr) {
    lr = _lr;
    rr = _rr;
    return _get(1, 0, off - 1);
  }
};
int main() {
  int n, m;
  while (scanf("%d%d", &n, &m) >= 1) {
    vector<long long> pr(n);
    for (int i = 0; i < n; i++) scanf("%I64d", &pr[i]);
    vector<vector<pair<int, long long> > > rs(n);
    for (int i = 0; i < m; i++) {
      int a, b;
      long long p;
      scanf("%d%d%I64d", &a, &b, &p), a--, b--;
      rs[a].push_back(make_pair(b, p));
    }
    segm_tree tr(n + 1);
    long long ans = 0;
    long long prval = 0;
    for (int i = n - 1; i >= 0; i--) {
      for (int i2 = 0; i2 < ((int)(rs[i]).size()); i2++)
        tr.add(rs[i][i2].first + 1, n + 1, rs[i][i2].second);
      tr.add(i + 1, n + 1, -pr[i]);
      long long cval = max(prval, tr.getMax(i, n + 1));
      ans = max(ans, cval);
      tr.add(i, i, cval);
      prval = cval;
    }
    printf("%I64d\n", ans);
  }
  return 0;
}
