#include <bits/stdc++.h>
#define int long long
#define double signed
using namespace std;
typedef double db;
const int maxn = 1e4 + 5;
const int maxm = 1e3 + 5;
const db eps = 1e-6;
const db inf = 1e18;
struct Simplex {
int n, m;
db a[maxn];
db f[maxm][maxn];
Simplex() = default;
void init(int nn, int mm) {
n = nn;
m = mm;
}
void output() {
for (int i = 0; i <= n; i++) cout << a[i] << " ";
cout << endl;
for (int i = 1; i <= m; i++) {
for (int j = 0; j <= n; j++) cout << f[i][j] << " ";
cout << endl;
}
}
void pivot(int r, int c) {
// 将第 r 个基变量换进,把第 c 个非基变量换出
db k = f[r][c];
for (int i = 0; i <= n; i++) f[r][i] /= k;
k = a[c];
a[c] = 0;
for (int z = 0; z <= n; z++) a[z] -= f[r][z] * k;
for (int j = 1; j <= m; j++) {
if (j == r || fabs(f[j][c]) < eps) continue;
db k = f[j][c];
f[j][c] = 0;
for (int z = 0; z <= n; z++) f[j][z] -= f[r][z] * k;
}
}
bool simplex() {
while (true) {
int r, c, mn = inf;
r = c = -1;
for (int i = 1; i <= n; i++) {
if (a[i] > eps) c = i, i = n + 1;
}
if (c == -1) return 1;
for (int j = 1; j <= m; j++) {
if (f[j][c] > eps && f[j][0] / f[j][c] < mn) {
mn = f[j][0] / f[j][c];
r = j;
}
}
if (r == -1) return 0;
pivot(r, c);
}
}
};
int n, m;
Simplex S;
signed main() {
cin >> n >> m;
S.init(m, n);
for (int i = 1; i <= n; i++) cin >> S.f[i][0];
for (int i = 1; i <= m; i++) {
int l, r;
cin >> l >> r >> S.a[i];
for (int j = l; j <= r; j++) S.f[j][i] = 1;
}
S.simplex();
cout << -S.a[0] << endl;
return 0;
}