//#pragma GCC optimize(2)
//#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h> // By Lucky Ox
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define int long long
#define double long double
#define endl "\n"
#define pii pair<int, int>
#define tans cout << "答案:"
using namespace std;
using i128 = __int128;
const int mod = 1000000000000002493, INF = 0x3f3f3f3f3f3f3f3f;
int lcm(int x, int y) {return x*y/__gcd(x, y);}
int q_pow(int a, int k) {int res=1;while(k){if(k&1)res=res*a%mod;k>>=1;a=a*a%mod;}return res;}
int len_10(int x){int len=0;while(x){x/=10;len++;}return len;}int len_2(int x){int len=0;while(x){x/=2;len++;}return len;}
// 求在10/2进制下的位数
const int N = 1e6 + 10;
int n, m;
int r[N], d[N], s[N], t[N];
bool check(int x) {
auto tmp = r;
for(int i = 1; i <= x; i ++ ) {
tmp[s[i]] -= d[i];
tmp[t[i] + 1] += d[i];
}
for(int i = 1; i <= n; i ++ ) {
tmp[i] += tmp[i - 1];
if(tmp[i] < 0) return 1;
}
return 0;
}
void solve() {
cin >> n >> m;
for(int i = 1; i <= n; i ++ ) cin >> r[i], r[i] -= r[i - 1];
for(int i = 1; i <= m; i ++ ) cin >> d[i] >> s[i] >> t[i];
int l = 1, r = m;
while(l <= r) {
cout << l << " " << r << endl;
int mid = (l + r) >> 1;
if(check(mid)) r = mid - 1;
else l = mid + 1;
cout << mid << " " << check(mid) << endl;
cout << l << " " << r << endl << endl;
}
if(l == m + 1) cout << 0 << endl;
else
cout << -1 << endl << l << endl;
}
void init() {
}
signed main() {
IOS;
cout << fixed << setprecision(10);
init();
int T = 1;
//cin >> T;
while (T -- ) solve();
return 0;
}