This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
#define ll long long
#define int long long
const int nmax = 5e5 + 5, N = 1e6;
const ll oo = 1e9 + 1, base = 311;
const int lg = 19, M = 10;
const ll mod = 1e9 + 7, mod2 = 1e9 + 5277;
#define pii pair<int, int>
#define fi first
#define se second
#define endl "\n"
#define debug(a, n) for(int i = 1; i <= n; ++i) cout << a[i] << ' '; cout << "\n";
using namespace std;
int n, q;
int a[nmax], d[nmax], L[nmax], R[nmax];
int r[nmax];
int get(int u){
    return r[u] ? r[u] = get(r[u]) : u;
}
void Union(int u, int v){
    int x = get(u);
    int y = get(v);
    if(x != y){
        r[x] = y;
        L[y] = min(L[x], L[y]);
        R[y] = max(R[x], R[y]);
    }
}
int b[nmax], c[nmax];
struct node{
    int t, l, r;
}Q[nmax];
vector<int> nen;
ll calc(int t, int m){
    int cur = 1, i = n, kq = 0;
    bool ok = (t <= m);
    t /= d[n];
    int base = 3;
    while(1){
        int tx = get(i);
        int l =L[tx], r = R[tx];
        while(l <= r){
            int mid = r + l >> 1;
            if(a[mid] + (t * (b[mid] - a[mid])) <= m){
                l = mid + 1;
                kq = max(kq, mid);
            }
            else r= mid - 1;
        }
//        cout << a[n - 1] + (t * (b[n - 1] - a[n - 1])) << ' ';
//        cout << c[L[tx]] << ' ';
        i = L[tx] - 1;
        if(i == 0) break;
        t /= c[L[tx]];
        if(!t) break;
    }
    int l = 1, r = i;
    while(l <= r){
        int mid = r+ l >> 1;
        if(a[mid] <= m){
            l = mid + 1;
            kq = max(kq, mid);
        }
        else r = mid -1;
    }
    return kq + ok;
}
main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
//    freopen("code.inp", "r", stdin);
//    freopen("code.out", "w", stdout);
    cin >> n >> q;
    for(int i = 1; i <= n; ++i)cin >> d[n - i + 1], a[n - i + 1] = -i;
    for(int i = 1; i <= n; ++i) L[i] = R[i] = i;
    b[n] = a[n] + d[n];
    for(int i = n - 1; i >= 1; --i){
        if(a[i] + d[i] < b[i + 1]){
            b[i] = b[i + 1] - 1;
            Union(i, i + 1);
//            cout << i << ' ';
        }
        else {
            int x = b[i + 1] - a[i + 1];
            int l = 2, r = 1e9, kq = -1;
            while(l <= r){
                int mid = r + l >> 1;
                if(a[i] + d[i] < a[i + 1] + (x * mid)){
                    r = mid - 1;
                    kq = mid;
                }
                else l = mid + 1;
            }
            c[i + 1] = kq;
            b[i] = a[i + 1] + (x * kq) - 1;
        }
    }
//    cout << b[2] - a[2] << endl;
//    for(int i = 1; i <= n; ++i) cout << get(i) << ' ';
//    cout << c[3] << ' ' << c[1];
//    calc(100, 100);
//    calc(8, 5);
    for(int e = 1,t,l,r; e <= q; ++e){
        cin >> t >> l >> r;
        cout << calc(t, r) - calc(t, l - 1)<< endl;
    }
}
/*
3 1
2 3 3
8 3 5
*/
Compilation message (stderr)
worst_reporter3.cpp: In function 'long long int calc(long long int, long long int)':
worst_reporter3.cpp:47:25: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   47 |             int mid = r + l >> 1;
      |                       ~~^~~
worst_reporter3.cpp:63:20: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   63 |         int mid = r+ l >> 1;
      |                   ~^~~
worst_reporter3.cpp:39:9: warning: unused variable 'cur' [-Wunused-variable]
   39 |     int cur = 1, i = n, kq = 0;
      |         ^~~
worst_reporter3.cpp:42:9: warning: unused variable 'base' [-Wunused-variable]
   42 |     int base = 3;
      |         ^~~~
worst_reporter3.cpp: At global scope:
worst_reporter3.cpp:73:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   73 | main(){
      | ^~~~
worst_reporter3.cpp: In function 'int main()':
worst_reporter3.cpp:92:29: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   92 |                 int mid = r + l >> 1;
      |                           ~~^~~| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |