#include "bits/stdc++.h"
using namespace std;
#define ll long long
#define pb push_back
#define ppb pop_back
#define inf 1e18
#define all(v) v.begin(), v.end()
#define ff first
#define ss second
#define sz size
#define intmx INT_MAX
#define intmn INT_MIN
const int N = 1000005;
ll bit[N];
int ans[N];
struct qu {
int r, id;
ll k;
};
void upd(int i, ll val, int n) {
for(; i <= n; i += i & -i) bit[i] = max(bit[i], val);
}
ll get(int i) {
ll res = 0;
for(; i > 0; i -= i & -i) res = max(res, bit[i]);
return res;
}
void solve() {
int n, m;
cin >> n >> m;
vector<int> w(n+1);
for(int i = 1; i <= n; i++) {
cin >> w[i];
}
vector<int> L(n+1, 0);
stack<int> s;
for(int i = 1; i <= n; i++) {
while(!s.empty() && w[s.top()] <= w[i]) s.pop();
if(!s.empty()) L[i] = s.top();
s.push(i);
}
vector<vector<int>> g(n+1);
for(int i = 1; i <= n; i++) {
if(L[i] != 0) g[L[i]].pb(i);
}
vector<vector<qu>> q_at(n+1);
for(int i = 1; i <= m; i++) {
int l, r;
ll k;
cin >> l >> r >> k;
q_at[l].pb({r, i, k});
}
for(int i = n; i >= 1; i--) {
for(int idx : g[i]) {
upd(idx, (ll)w[i] + w[idx], n);
}
for(auto &q : q_at[i]) {
if(get(q.r) <= q.k) ans[q.id] = 1;
else ans[q.id] = 0;
}
}
for(int i = 1; i <= m; i++) {
cout << ans[i] << endl;
}
}
signed main() {
ios_base::sync_with_stdio(0); cin.tie(0);
int t = 1;
while(t--) {
solve();
}
return 0;
}