#include <bits/stdc++.h>
#define el '\n'
#define FNAME "Library"
#define allof(x) x.begin(),x.end()
#define allof1(x) x.begin()+1,x.end()
#define mset(x,n) memset(x,(n),sizeof(x))
using namespace std;
const long long MOD = (long long) 1e9 + 7;
template<class X,class Y> bool minimize(X &a,Y b){ if (a>b) {a=b; return true;} return false;}
template<class X,class Y> bool maximize(X &a,Y b){ if (a<b) {a=b; return true;} return false;}
void setup(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
	if (fopen(FNAME".inp","r")){
		freopen(FNAME".inp","r",stdin);
		freopen(FNAME".out","w",stdout);
	}
}
const long long INF = (long long) 1e17 + 15092007;
struct SegmentTree{
    int n;
    vector<long long> st;
    SegmentTree(int N=0){
        n = N;
        if (n>0){
            st.assign(4 * n + 4, -INF);
        }
    }
    void update(int node,int l,int r,int pos,long long val){
        if (l > r) return;
        if (l==r){
            maximize(st[node],val);
            return;
        }
        int mid = (l+r)>>1;
        if (pos <= mid) update(2*node,l,mid,pos,val);
        else update(2*node+1,mid+1,r,pos,val);
        st[node] = max(st[2*node],st[2*node+1]);
    }
    void update(int pos,long long val){
        update(1,1,n,pos,val);
    }
    long long getMax(int node,int l,int r,int wanted_l,int wanted_r){
        if (wanted_r < l or r < wanted_l) return -INF;
        if (wanted_l <= l and r <= wanted_r) return st[node];
        int mid = (l+r)>>1;
        return max(getMax(2*node,l,mid,wanted_l,wanted_r),
                    getMax(2*node+1,mid+1,r,wanted_l,wanted_r));
    }
    long long getMax(int l,int r){
        return getMax(1,1,n,l,r);
    }
};  
struct Query{
    int l,r,K,ID;
    Query(int L,int R,int K,int ID):l(L),r(R),K(K),ID(ID) {}
    bool operator < (const Query &other) const{
        return (r < other.r or (r==other.r and l < other.l));
    }
};
int n,q;
vector<long long> a;
vector<Query> query;
void init(){
	cin>>n>>q;
    a.assign(n+1,0);
    for (int i=1;i<=n;i++) cin>>a[i];
    for (int i=0;i<q;i++){
        int l,r,k;
        cin>>l>>r>>k;
        query.emplace_back(l,r,k,i);
    }
}
void sol(){
	stack<int> st;
    vector<int> ngel(n+1,0);
    vector<long long> inverVal(n+1,0);
    for (int i=1;i<=n;i++){
        while (!st.empty() and a[st.top()] <= a[i]) st.pop();
        ngel[i] = (st.empty() ? 0 : st.top());
        if (!st.empty()) inverVal[i] = a[i] + a[ngel[i]];
        st.push(i);
    }
    sort(allof(query));
    // * ST on L and query on R
    SegmentTree ST(n);
    vector<int> res(q,0);
    int ptr = 0;    
    for (int r = 1; r <= n; r++){
        if (ngel[r]) ST.update(ngel[r],inverVal[r]);
        while (ptr < q and query[ptr].r == r){
            int L = query[ptr].l;
            int R = query[ptr].r;
            int K = query[ptr].K;
            int ID = query[ptr].ID;
            long long maxRange = ST.getMax(L,R);
            if (maxRange == -INF) res[ID] = 1;
            else res[ID] = (maxRange <= K);
            ptr++;
        }
    }
    for (int x : res) cout<<x<<el;
}
int main(){
    setup();
    init();
    sol();
}
Compilation message (stderr)
sortbooks.cpp: In function 'void setup()':
sortbooks.cpp:16:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   16 |                 freopen(FNAME".inp","r",stdin);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
sortbooks.cpp:17:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   17 |                 freopen(FNAME".out","w",stdout);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |