import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
static int n;
static int m;
static int[] rooms;
static int[] dj;
static int[] sj;
static int[] tj;
static int[] b;
public static boolean check(int mid) {
//初始化差分数组
Arrays.fill(b,0);
for (int i = 1; i <=mid ; i++) {
b[sj[i]] += dj[i];
b[tj[i] + 1] -= dj[i];
}
//恢复原数组
for (int i = 1; i <= n; i++) {
b[i]+=b[i-1];
//恢复后的b数组表示mid及以前的订单下,各天需要的房间数
if(b[i]>rooms[i]){
return false;
}
}
return true;
}
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line1 = in.readLine();
String[] s = line1.split(" ");
n = Integer.parseInt(s[0]);
//天数
m = Integer.parseInt(s[1]);
//订单数量
rooms = new int[n + 10];
b = new int[n + 10];
dj = new int[m + 10];
sj = new int[m + 10];
tj = new int[m + 10];
String line = in.readLine();
String[] room = line.split(" ");
for (int i = 1; i <=n ; i++) {
rooms[i] = Integer.parseInt(room[i-1]);
}
for (int i = 1; i <= m; i++) {
String line2 = in.readLine();
String[] dingdan = line2.split(" ");
dj[i] = Integer.parseInt(dingdan[0]);
sj[i] = Integer.parseInt(dingdan[1]);
tj[i] = Integer.parseInt(dingdan[2]);
}
//二分求解
int l = -1, r = m + 1;
while (l + 1 != r) {
int mid = l + (r - l) / 2;
if(check(mid)){
l=mid;
}else {
r=mid;
}
}
if (l != m) {
System.out.println(-1);
System.out.print(r);
} else {
System.out.println(0);
}
}
}