#include <bits/stdc++.h>
#define int long long
#define arr3 array <int , 3>
#define pii pair <int , int>
#define fi first
#define se second
#define BIT(x , k) ((x >> k)&1)
#define MASK(x) (1 << x)
using namespace std;
const int maxn = 1e6 + 7;
const int INF = 1e18;
struct query{int l , r , k , id;};
vector <query> ask[maxn];
int st[maxn*4]; bool ans[maxn];
void update(int id , int l , int r , int pos , int val)
{
if(r < pos || l > pos) return;
if(l == r) {st[id] = max(st[id] , val); return;}
int mid = (l+r)>>1;
update(id*2 , l , mid , pos , val);
update(id*2+1, mid+1 , r , pos , val);
st[id] = max(st[id*2] , st[id*2+1]);
}
int get(int id , int l , int r , int u , int v)
{
if(r < u || l > v) return -INF;
if(u <= l && r <= v) return st[id];
int mid = (l+r)>>1;
return max(get(id*2 , l , mid , u , v) , get(id*2+1 , mid+1 , r , u , v));
}
int n , a[maxn] , q , L[maxn];
void solve()
{
cin >> n >> q;
stack <int> st;
a[0] = INF;
st.push(0);
for(int i = 1; i <= n; i++)
{
cin >> a[i];
while(a[st.top()] <= a[i]) st.pop();
L[i] = st.top();
st.push(i);
}
for(int i = 1; i <= q; i++)
{
int l , r , k; cin >> l >> r >> k;
ask[r].push_back({l , r , k , i});
}
for(int i = 1; i <= n; i++)
{
update(1 , 0 , n , L[i] , a[i] + a[L[i]]);
for(auto [l , r , k , id]: ask[i]) ans[id] = (bool)(get(1 , 0 , n , l , r) <= k);
}
for(int i = 1; i <= q; i++) cout << ans[i] << '\n';
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
solve();
return 0;
}