#include <bits/stdc++.h>
using namespace std;
// 快读:n、m 都到 1e6 时,光是解析输入就占掉大半时间,cin 顶不住时限
class FastInput {
static const int SIZE = 1 << 16;
char buf[SIZE];
int pos = 0, len = 0;
char getChar() {
if (pos == len) {
len = (int)fread(buf, 1, SIZE, stdin);
pos = 0;
if (len == 0) return 0;
}
return buf[pos++];
}
public:
template <class T>
bool read(T &x) {
char c = getChar();
while (c && c != '-' && (c < '0' || c > '9')) c = getChar();
if (!c) return false;
bool neg = false;
if (c == '-') { neg = true; c = getChar(); }
x = 0;
while (c >= '0' && c <= '9') { x = x * 10 + (c - '0'); c = getChar(); }
if (neg) x = -x;
return true;
}
};
struct Order {
long long d;
int s, t;
};
int main() {
FastInput in;
int n, m;
in.read(n);
in.read(m);
vector<long long> r(n + 2, 0);
for (int i = 1; i <= n; i++) in.read(r[i]);
vector<Order> orders(m + 1);
for (int j = 1; j <= m; j++) {
in.read(orders[j].d);
in.read(orders[j].s);
in.read(orders[j].t);
}
vector<long long> diff(n + 3, 0);
// 前 k 份订单能否全部满足
auto check = [&](int k) -> bool {
fill(diff.begin(), diff.end(), 0LL);
for (int j = 1; j <= k; j++) {
diff[orders[j].s] += orders[j].d;
diff[orders[j].t + 1] -= orders[j].d;
}
long long used = 0;
for (int i = 1; i <= n; i++) {
used += diff[i];
if (used > r[i]) return false;
}
return true;
};
int lo = 0, hi = m;
while (lo < hi) {
int mid = lo + (hi - lo + 1) / 2;
if (check(mid)) lo = mid;
else hi = mid - 1;
}
if (lo == m) {
printf("0\n");
} else {
printf("-1\n%d\n", lo + 1);
}
return 0;
}