#include <bits/stdc++.h>
#define up(i,a,b) for (int i = (int)a; i <= (int)b; i++)
#define down(i,a,b) for (int i = (int)a; i >= (int)b; i--)
#define int long long
#define all(x) x.begin(), x.end()
using namespace std;
const int maxn = 2e5 + 10;
const int LOG = log2(maxn) + 1;
int a[maxn];
int logg[maxn];
int sp[LOG][maxn];
int n,q;
void build_gcd(int n){
sp[0][1] = a[1];
up(i,2,n){
logg[i] = logg[(i >> 1)] + 1;
sp[0][i] = a[i];
}
for (int i = 1; (1 << i) <= n; i++){
for (int j = 1; j + (1 << i) - 1 <= n; j++){
sp[i][j] = __gcd(sp[i-1][j], sp[i-1][j + (1 << (i-1))]);
}
}
}
int get(int l, int r){
int k = logg[r - l + 1];
return __gcd(sp[k][l], sp[k][r - (1 << k) + 1]);
}
struct Query{
int d, l, r, type;
bool operator < (const Query& O){
if (d == O.d) return type < O.type;
return d < O.d;
}
};
vector<Query> Q;
int F[maxn];
/**
Gọi F[i] là vị trí xa nhất về phía bên phải của i
F[i] >= i;
sao cho gcd(i, F[i]) <= d
**/
int BIT[maxn];
void update(int x, int val){
while (x <= n){
BIT[x] += val;
x += (x & (-x));
}
}
int get(int x){
int res = 0;
while (x){
res += BIT[x];
x -= (x & (-x));
}
return res;
}
void make_prefix_sum(){
up(i,1,n){
BIT[i] = BIT[i-1] + n+1;
F[i] = n+1;
}
down(i,n,1){
BIT[i] -= BIT[i - (i & (-i))];
}
}
void init_offline(){
up(i,1,n){
int pos = i;
up(loop, 0, 29){
int L = pos;
int R = n+1;
int cur_GCD = get(i, pos);
while (R - L > 1){
int MID = (L+R) >> 1;
if (get(i, MID) == cur_GCD) L = MID;
else R = MID;
}
Q.push_back({cur_GCD, i, pos, -1});
pos = L+1;
if (pos > n) break;
}
}
}
int res[maxn];
void solve(){
for (auto& que : Q){
int l = que.l;
int r = que.r;
int type = que.type;
if (type < 0){
update(l, -F[l]);
F[l] = r;
update(l, F[l]);
}
else{
int L = l;
int R = r+1;
while (R - L > 1){
int MID = (L+R) >> 1;
if (F[MID] <= r) L = MID;
else R = MID;
}
if (F[L] > r) res[type] = 0;
else res[type] = (r + 1)*(L - l + 1) - (get(L) - get(l-1));
}
}
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
#define Task "A"
if (fopen(Task".inp", "r")){
freopen(Task".inp", "r", stdin);
freopen(Task".out", "w", stdout);
}
cin >> n >> q;
up(i,1,n) cin >> a[i];
build_gcd(n);
init_offline();
up(i,1,q){
int l,r,d;
cin >> l >> r >> d;
Q.push_back({d, l, r, i});
}
sort(all(Q));
make_prefix_sum();
solve();
up(i,1,q) cout << res[i] << "\n";
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgdXAoaSxhLGIpIGZvciAoaW50IGkgPSAoaW50KWE7IGkgPD0gKGludCliOyBpKyspCiNkZWZpbmUgZG93bihpLGEsYikgZm9yIChpbnQgaSA9IChpbnQpYTsgaSA+PSAoaW50KWI7IGktLSkKI2RlZmluZSBpbnQgbG9uZyBsb25nCiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSwgeC5lbmQoKQp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IG1heG4gPSAyZTUgKyAxMDsKY29uc3QgaW50IExPRyA9IGxvZzIobWF4bikgKyAxOwppbnQgYVttYXhuXTsKaW50IGxvZ2dbbWF4bl07CmludCBzcFtMT0ddW21heG5dOwppbnQgbixxOwoKdm9pZCBidWlsZF9nY2QoaW50IG4pewogICAgc3BbMF1bMV0gPSBhWzFdOwogICAgdXAoaSwyLG4pewogICAgICAgIGxvZ2dbaV0gPSBsb2dnWyhpID4+IDEpXSArIDE7CiAgICAgICAgc3BbMF1baV0gPSBhW2ldOwogICAgfQogICAgZm9yIChpbnQgaSA9IDE7ICgxIDw8IGkpIDw9IG47IGkrKyl7CiAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogKyAoMSA8PCBpKSAtIDEgPD0gbjsgaisrKXsKICAgICAgICAgICAgc3BbaV1bal0gPSBfX2djZChzcFtpLTFdW2pdLCBzcFtpLTFdW2ogKyAoMSA8PCAoaS0xKSldKTsKICAgICAgICB9CiAgICB9Cn0KCmludCBnZXQoaW50IGwsIGludCByKXsKICAgIGludCBrID0gbG9nZ1tyIC0gbCArIDFdOwogICAgcmV0dXJuIF9fZ2NkKHNwW2tdW2xdLCBzcFtrXVtyIC0gKDEgPDwgaykgKyAxXSk7Cn0KCnN0cnVjdCBRdWVyeXsKICAgIGludCBkLCBsLCByLCB0eXBlOwogICAgYm9vbCBvcGVyYXRvciA8IChjb25zdCBRdWVyeSYgTyl7CiAgICAgICAgaWYgKGQgPT0gTy5kKSByZXR1cm4gdHlwZSA8IE8udHlwZTsKICAgICAgICByZXR1cm4gZCA8IE8uZDsKICAgIH0KfTsKCnZlY3RvcjxRdWVyeT4gUTsKaW50IEZbbWF4bl07Ci8qKgpH4buNaSBGW2ldIGzDoCB24buLIHRyw60geGEgbmjhuqV0IHbhu4EgcGjDrWEgYsOqbiBwaOG6o2kgY+G7p2EgaQpGW2ldID49IGk7CnNhbyBjaG8gZ2NkKGksIEZbaV0pIDw9IGQKKiovCgppbnQgQklUW21heG5dOwp2b2lkIHVwZGF0ZShpbnQgeCwgaW50IHZhbCl7CiAgICB3aGlsZSAoeCA8PSBuKXsKICAgICAgICBCSVRbeF0gKz0gdmFsOwogICAgICAgIHggKz0gKHggJiAoLXgpKTsKICAgIH0KfQppbnQgZ2V0KGludCB4KXsKICAgIGludCByZXMgPSAwOwogICAgd2hpbGUgKHgpewogICAgICAgIHJlcyArPSBCSVRbeF07CiAgICAgICAgeCAtPSAoeCAmICgteCkpOwogICAgfQogICAgcmV0dXJuIHJlczsKfQoKdm9pZCBtYWtlX3ByZWZpeF9zdW0oKXsKICAgIHVwKGksMSxuKXsKICAgICAgICBCSVRbaV0gPSBCSVRbaS0xXSArIG4rMTsKICAgICAgICBGW2ldID0gbisxOwogICAgfQogICAgZG93bihpLG4sMSl7CiAgICAgICAgQklUW2ldIC09IEJJVFtpIC0gKGkgJiAoLWkpKV07CiAgICB9Cn0KCnZvaWQgaW5pdF9vZmZsaW5lKCl7CiAgICB1cChpLDEsbil7CiAgICAgICAgaW50IHBvcyA9IGk7CiAgICAgICAgdXAobG9vcCwgMCwgMjkpewogICAgICAgICAgICBpbnQgTCA9IHBvczsKICAgICAgICAgICAgaW50IFIgPSBuKzE7CiAgICAgICAgICAgIGludCBjdXJfR0NEID0gZ2V0KGksIHBvcyk7CiAgICAgICAgICAgIHdoaWxlIChSIC0gTCA+IDEpewogICAgICAgICAgICAgICAgaW50IE1JRCA9IChMK1IpID4+IDE7CiAgICAgICAgICAgICAgICBpZiAoZ2V0KGksIE1JRCkgPT0gY3VyX0dDRCkgTCA9IE1JRDsKICAgICAgICAgICAgICAgIGVsc2UgUiA9IE1JRDsKICAgICAgICAgICAgfQogICAgICAgICAgICBRLnB1c2hfYmFjayh7Y3VyX0dDRCwgaSwgcG9zLCAtMX0pOwogICAgICAgICAgICBwb3MgPSBMKzE7CiAgICAgICAgICAgIGlmIChwb3MgPiBuKSBicmVhazsKICAgICAgICB9CiAgICB9Cn0KCmludCByZXNbbWF4bl07CnZvaWQgc29sdmUoKXsKICAgIGZvciAoYXV0byYgcXVlIDogUSl7CiAgICAgICAgaW50IGwgPSBxdWUubDsKICAgICAgICBpbnQgciA9IHF1ZS5yOwogICAgICAgIGludCB0eXBlID0gcXVlLnR5cGU7CiAgICAgICAgaWYgKHR5cGUgPCAwKXsKICAgICAgICAgICAgdXBkYXRlKGwsIC1GW2xdKTsKICAgICAgICAgICAgRltsXSA9IHI7CiAgICAgICAgICAgIHVwZGF0ZShsLCBGW2xdKTsKICAgICAgICB9CiAgICAgICAgZWxzZXsKICAgICAgICAgICAgaW50IEwgPSBsOwogICAgICAgICAgICBpbnQgUiA9IHIrMTsKICAgICAgICAgICAgd2hpbGUgKFIgLSBMID4gMSl7CiAgICAgICAgICAgICAgICBpbnQgTUlEID0gKEwrUikgPj4gMTsKICAgICAgICAgICAgICAgIGlmIChGW01JRF0gPD0gcikgTCA9IE1JRDsKICAgICAgICAgICAgICAgIGVsc2UgUiA9IE1JRDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoRltMXSA+IHIpIHJlc1t0eXBlXSA9IDA7CiAgICAgICAgICAgIGVsc2UgcmVzW3R5cGVdID0gKHIgKyAxKSooTCAtIGwgKyAxKSAtIChnZXQoTCkgLSBnZXQobC0xKSk7CiAgICAgICAgfQogICAgfQp9CgpzaWduZWQgbWFpbigpewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKDApOwogICAgI2RlZmluZSBUYXNrICJBIgogICAgaWYgKGZvcGVuKFRhc2siLmlucCIsICJyIikpewogICAgICAgIGZyZW9wZW4oVGFzayIuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbihUYXNrIi5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICB9CgogICAgY2luID4+IG4gPj4gcTsKICAgIHVwKGksMSxuKSBjaW4gPj4gYVtpXTsKICAgIGJ1aWxkX2djZChuKTsKCiAgICBpbml0X29mZmxpbmUoKTsKICAgIHVwKGksMSxxKXsKICAgICAgICBpbnQgbCxyLGQ7CiAgICAgICAgY2luID4+IGwgPj4gciA+PiBkOwogICAgICAgIFEucHVzaF9iYWNrKHtkLCBsLCByLCBpfSk7CiAgICB9CiAgICBzb3J0KGFsbChRKSk7CgogICAgbWFrZV9wcmVmaXhfc3VtKCk7CgogICAgc29sdmUoKTsKICAgIHVwKGksMSxxKSBjb3V0IDw8IHJlc1tpXSA8PCAiXG4iOwp9Cg==