#include "bits/stdc++.h"
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pii pair<int,int>
#define pll pair<long long,long long>
#define yes cout<<"Yes\n"
#define no cout<<"No\n"
#define pb push_back
#define sz(x) (int)(x).size()
#define rsz resize
#define ass assign
#define F(i,l,r) for(int i=(l);i<(r);++i)
typedef long long ll;
typedef unsigned long long ull;
typedef long double lld;
template<typename T> using pqg = priority_queue<T, vector<T>, greater<T>>;
#define each(a,x) for(auto a:x)
#define FOR(i,a) for(int i=0;i<(a);i++)
#define ROF(i,a,b) for(int i=(b)-1;i>=(a);i--)
#define eb emplace_back
#define ft front()
#define V vector
#ifndef ONLINE_JUDGE
#define debug(x) cerr << #x <<" "; _print(x); cerr << endl;
#else
#define debug(x)
#endif
void _print(ll t) {cerr << t;}
void _print(int t) {cerr << t;}
void _print(string t) {cerr << t;}
void _print(char t) {cerr << t;}
void _print(lld t) {cerr << t;}
void _print(double t) {cerr << t;}
void _print(ull t) {cerr << t;}
template <class T, class V> void _print(pair <T, V> p);
template <class T> void _print(vector <T> v);
template <class T> void _print(set <T> v);
template <class T, class V> void _print(map <T, V> v);
template <class T> void _print(multiset <T> v);
template <class T, class V> void _print(pair <T, V> p) {cerr << "{"; _print(p.ff); cerr << ","; _print(p.ss); cerr << "}";}
template <class T> void _print(vector <T> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
template <class T> void _print(set <T> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
template <class T> void _print(multiset <T> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
template <class T, class V> void _print(map <T, V> v) {cerr << "[ "; for (auto i : v) {_print(i); cerr << " ";} cerr << "]";}
const int maxn=1e6+5;
struct ST{
ll t[maxn*4];
ST(){
fill(t,t+4*maxn,0);
}
void upd(int n,int b,int e,int i,ll x){
if(b==e){
t[n]=max(t[n],x);
return;
}
int mid=(b+e)>>1,l=n<<1,r=l|1;
if(i<=mid)upd(l,b,mid,i,x);
else upd(r,mid+1,e,i,x);
t[n]=max(t[l],t[r]);
}
ll query(int n,int b,int e,int i,int j){
if(b>j || e<i)return 0;
if(b>=i && e<=j)return t[n];
int mid=(b+e)>>1,l=n<<1,r=l|1;
ll L=query(l,b,mid,i,j),R=query(r,mid+1,e,i,j);
return max(L,R);
}
} t;
struct que{
int l,id;
ll k;
};
void solve(){
int n,m;
cin>>n>>m;
V<ll> w(n+1);
F(i,1,n+1)cin>>w[i];
V<V<que>> ques(n+1);
FOR(i,m){
int l,r;
ll k;
cin>>l>>r>>k;
ques[r].pb({l,i,k});
}
V<int> res(m),st;
st.reserve(n+1);
F(i,1,n+1){
//debug(st);
while(!st.empty() && w[st.back()]<=w[i])st.pop_back();
if(!st.empty()){
ll pair_sum=w[st.back()]+w[i];
t.upd(1,1,n,st.back(),pair_sum);
}
st.pb(i);
each(q,ques[i]){
if(q.l==i)res[q.id]=1;
else{
ll mxsum=t.query(1,1,n,q.l,i);
res[q.id]=(mxsum<=q.k);
}
}
}
FOR(i,m)cout<<res[i]<<'\n';
}
signed main(){
ios_base::sync_with_stdio(0);cin.tie(nullptr);
// #ifndef ONLINE_JUDGE
// freopen("output.txt", "w", stdout);
// freopen("input.txt", "r", stdin);
// freopen("Error.txt", "w", stderr);
// #endif
int tt=1;
//cin>>tt;
while(tt--)solve();
return 0;
}