#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
struct SegTree {
vector<int> tree;
SegTree(int n) {
tree.assign(4*n, 0);
}
void query(int p, int l, int r, int i, int x) {
if (l>i||r<i) return;
if (l==r) {
tree[p] = x;
return;
}
int m = (l+r)/2;
query(2*p, l, m, i, x);
query(2*p+1, m+1, r, i, x);
tree[p] = max(tree[2*p], tree[2*p+1]);
}
int rmq(int p, int l, int r, int i, int j) {
if (i>j) return 0;
if (l>j || r<i) return 0;
if (i<=l && r<=j) return tree[p];
int m = (l+r)/2;
return max(rmq(2*p, l, m, i, j), rmq(2*p+1, m+1, r, i, j));
}
};
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int n, m; cin >> n >> m;
vector<int> a(n);
for (int i=0; i<n; i++) {
cin >> a[i];
}
while (m--) {
int l, r, k; cin >> l >> r >> k;
l--; r--;
vector<int> b;
for (int i=l; i<=r; i++) {
b.push_back(a[i]);
}
vector<int> c = b;
sort(c.begin(), c.end());
map<int, int> mp;
int s = b.size();
for (int i=0; i<s; i++) {
mp[b[i]] = i;
}
SegTree st(s);
for (int i=0; i<s; i++) {
st.query(1, 0, s-1, i, b[i]);
}
bool can = true;
for (int i=s-1; i>=0; i--) {
int need = c[i];
int idx = mp[need];
int sm=c[i];
sm += st.rmq(1, 0, s-1, idx+1, i);
if (sm>k) can = false;
st.query(1, 0, s-1, idx, 0);
}
cout << (can ? 1 : 0) << "\n";
}
}