#include <bits/stdc++.h>
int dr[] = {2, 2, -2, -2, 1, -1, 1, -1};
int dc[] = {1, -1, 1, -1, 2, 2, -2, -2};
int dr1[] = {0, 0, 0, 1, 1, 1, -1, -1, -1};
int dc1[] = {-1, 0, 1, -1, 0, 1, -1, 0, 1};
int dr2[] = {0, 0, 1, -1};
int dc2[] = {1, -1, 0, 0};
using namespace std;
struct data {
  long long int m, laz;
};
data t[220004 * 3];
void propagate(long long int l, long long int val) {
  t[l].m += val;
  t[l].laz += val;
}
void update(long long int n, long long int b, long long int e, long long int x,
            long long int y, long long int val) {
  if (b > y || e < x) return;
  if (b >= x && e <= y) {
    t[n].m += val;
    t[n].laz += val;
    return;
  }
  long long int mid = (b + e) >> 1, l = n * 2, r = l + 1;
  if (t[n].laz != 0) {
    propagate(l, t[n].laz);
    propagate(r, t[n].laz);
    t[n].laz = 0;
  }
  update(l, b, mid, x, y, val);
  update(r, mid + 1, e, x, y, val);
  t[n].m = max(t[l].m, t[r].m);
}
long long int query(long long int n, long long int b, long long int e,
                    long long int x, long long int y) {
  if (b > y || e < x) return 0;
  if (b >= x && e <= y) return t[n].m;
  long long int mid = (b + e) >> 1, l = n * 2, r = l + 1;
  if (t[n].laz != 0) {
    propagate(l, t[n].laz);
    propagate(r, t[n].laz);
    t[n].laz = 0;
  }
  long long int p = query(l, b, mid, x, y);
  long long int p1 = query(r, mid + 1, e, x, y);
  t[n].m = max(p, p1);
  return max(p, p1);
}
long long int a[220004];
vector<pair<long long int, long long int> > adj[220004];
int main() {
  long long int n, m, i, j, x, y, c;
  while (cin >> n >> m) {
    for (i = 1; i <= n; i++) {
      cin >> a[i];
    }
    for (i = 1; i <= m; i++) {
      cin >> x >> y >> c;
      adj[y].push_back(make_pair(x, c));
    }
    long long int ans = 0;
    long long int max1 = 0;
    for (i = 1; i <= n; i++) {
      update(1, 0, n, 0, i - 1, -a[i]);
      for (j = 0; j < adj[i].size(); j++) {
        long long int p = adj[i][j].first;
        long long int p1 = adj[i][j].second;
        update(1, 0, n, 0, p - 1, p1);
      }
      long long int p = query(1, 0, n, 0, i - 1);
      max1 = max(max1, p);
      update(1, 0, n, i, i, max1);
    }
    cout << max1 << endl;
  }
  return 0;
}
