#define x first #define y second #define x1 X1 #define x2 X2 #define y1 Y1 #define y2 Y2 #define mp make_pair #define pb push_back
usingnamespacestd;
typedeflonglong LL; typedef pair<int, int> pii;
template <typename T> inlineintChkmax(T &a, T b){return a < b ? a = b, 1 : 0;} template <typename T> inlineintChkmin(T &a, T b){return a > b ? a = b, 1 : 0;} inlineintread() { int sum = 0, fl = 1; char ch = getchar(); for (; !isdigit(ch); ch = getchar()) if (ch == '-') fl = -1; for (; isdigit(ch); ch = getchar()) sum = (sum << 3) + (sum << 1) + ch - '0'; return sum * fl; }
constint Maxn = 1000 + 10, Maxm = 10000 + 10;
int N, M; double A[Maxm][Maxn];
namespace Simplex { constdouble eps = 1e-8; inlinevoidpivot(int x, int y) { double tmp = A[x][y]; for (int j = 0; j <= N; ++j) A[x][j] /= tmp; for (int i = 0; i <= M; ++i) if (i != x && abs(A[i][y]) > eps) { tmp = A[i][y]; A[i][y] = 0; for (int j = 0; j <= N; ++j) A[i][j] -= tmp * A[x][j]; } }
inlinevoidwork() { while (1) { int x = 0, y = 0; for (int j = 1; j <= N; ++j) if (A[0][j] > eps) { y = j; break; } if (!y) return ; double Min = 1.0 * 0x3f3f3f3f; for (int i = 1; i <= M; ++i) if (A[i][y] > eps && A[i][0] / A[i][y] < Min) Min = A[i][0] / A[i][y], x = i; if (!x) return ; pivot(x, y); } } }
intmain() { #ifdef hk_cnyali freopen("A.in", "r", stdin); freopen("A.out", "w", stdout); #endif N = read(), M = read(); for (int j = 1; j <= N; ++j) scanf("%lf", &A[0][j]); for (int i = 1; i <= M; ++i) { int x = read(), y = read(); A[i][0] = 1.0 * read(); for (int j = x; j <= y; ++j) A[i][j] = 1.0; } Simplex :: work(); printf("%d\n",(int)(-A[0][0])); return0; }