#include <bits/stdc++.h>
using namespace std;
#define int long long
const int inf = 1e18;
const int mod = 1e9 + 7;
struct SegTree {
int sz;
vector<int> tree;
SegTree(int n) {
sz = 1;
while (sz < n)
sz *= 2;
tree.assign(sz * 2, 0);
}
void set(int i, int v, int x, int lx, int rx) {
if (rx - lx == 1) {
tree[x] = v;
return;
}
int m = (lx + rx) / 2;
if (i < m)
set(i, v, 2 * x + 1, lx, m);
else
set(i, v, 2 * x + 2, m, rx);
tree[x] = max(tree[2 * x + 1], tree[2 * x + 2]);
}
void set(int i, int v) { set(i, v, 0, 0, sz); }
int res(int l, int r, int x, int lx, int rx) {
if (l <= lx && rx <= r)
return tree[x];
if (rx <= l || r <= lx)
return 0;
int m = (lx + rx) / 2;
return max(res(l, r, 2 * x + 1, lx, m), res(l, r, 2 * x + 2, m, rx));
}
int res(int l, int r) { return res(l, r, 0, 0, sz); }
};
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n, m;
cin >> n >> m;
vector<int> a(n);
for (auto &i : a)
cin >> i;
vector<array<int, 3>> q(m);
vector<int> ans(m);
vector<vector<int>> query(n);
for (int i = 0; i < m; i++) {
int l, r, k;
cin >> l >> r >> k;
l--, r--;
query[l].push_back(i);
q[i] = {l, r, k};
}
SegTree sg(n);
stack<int> st;
for (int i = n - 1; i >= 0; i--) {
while (!st.empty() && a[st.top()] < a[i])
sg.set(st.top(), a[i] + a[st.top()]), st.pop();
st.push(i);
for (auto &j : query[i])
ans[j] = sg.res(q[j][0], q[j][1] + 1) <= q[j][2];
}
for (auto &i : ans)
cout << i << '\n';
return 0;
}