#include<bits/stdc++.h>
#define fri(i,n) for(int i=0;i<n;i++)
#define fr(i,a,b) for(int i=a;i<=b;i++)
#define ol(v) v.begin(),v.end()
#define forc(v) for(auto it:v)
#define se second
#define fi first
#define pb push_back
#define pf push_front
#define MX 1e18
#define MN -MX
#define MOD 1000000007
#define mid ((b+e)/2)
#define left (2*i+1)
#define right (2*i+2)
using namespace std;
typedef long long ll;
typedef long double ld;
template <typename T> istream&operator>>(istream &inp, vector<T> &vec){
fri(i,vec.size()) inp>>vec[i];
return inp;
}
template <typename T> ostream&operator<<(ostream &oup, vector<T> vec){
forc(vec) oup<<it<<" ";
oup<<"\n";
return oup;
}
class l1{public:ll t, f, time;l1(){t = f = time = 0;} l1(ll a, ll b, ll c){t = a, f = b, time = c;}
l1 operator+(const l1 &n){
return l1(t+n.t, f+n.f, max(time, n.time));
}
};
class l2{ public: ll l, r, t, f, time;l2(){l = r = t = f = time=0;} l2(ll a, ll b, ll c, ll d, ll e){l = a; r = b; t = c; f = d; time = e;}};
class nd{
public:
ll t, f;
nd(){
t = f = 0;
}
nd(ll a, ll b){
t = a; f = b;
}
ll get(){
return min(t, f);
}
nd operator+(const nd &n){
return nd(n.t+t, n.f+f);
}
};
ll cnt;
vector<ll> arr;
vector<l1> ll1;
vector<l2> ll2;
vector<nd> segT;
ll tx, fx;
int l, r;
ll pp;
vector<pair<ll, ll> > csum(100001);
ll T(ll n){ll kk=0;while(n>0 and n%2==0){kk++;n/=2;}return kk;}
ll F(ll n){ll kk=0;while(n>0 and n%5==0){kk++;n/=5;}return kk;}
void init(){
csum[0].fi = csum[0].se = 0;
csum[1].fi = csum[1].se = 0;
for(ll i = 2;i<=100000;i++){
csum[i].fi = T(i)+csum[i-1].fi;
csum[i].se = F(i)+csum[i-1].se;
}
}
void build(int b, int e, int i){
if(b==e){
segT[i].t = T(arr[b]);
segT[i].f = F(arr[b]);
return;
}
build(b, mid, left);
build(mid+1, e, right);
segT[i] = segT[left]+segT[right];
}
void first(int b, int e, int i){
segT[i].t += ll1[i].t*(e-b+1);
segT[i].f += ll1[i].f*(e-b+1);
if(b!=e){
ll1[left] = ll1[left]+ll1[i];
ll1[right] = ll1[right]+ll1[i];//(ll1[i].t, ll1[i].f, ll1[i].time);
}
// ll1[i] = l1();
}
void second(int b, int e, int i){
segT[i].t = csum[e-ll2[i].l+1].fi - csum[b-ll2[i].l].fi + ll2[i].t*(e-b+1);
segT[i].f = csum[e-ll2[i].l+1].se - csum[b-ll2[i].l].se + ll2[i].f*(e-b+1);
if(b!=e){
ll2[left] = ll2[i];//(ll2[i].l, ll2[i].r, ll2[i].t, ll2[i].f, ll2[i].time);
ll2[right] = ll2[i];//(ll2[i].l, ll2[i].r, ll2[i].t, ll2[i].f, ll2[i].time);
}
// ll2[i] = l2();
}
void lazy(int b, int e, int i){
if(ll2[i].time) second(b, e, i);
if(ll1[i].time) first(b, e, i);
ll2[i] = l2();
ll1[i] = l1();
}
void update(int b, int e, int i){
lazy(b, e, i);
if(b>r or e < l) return;
if(b >= l and e <= r){
segT[i].t += tx*(e-b+1);
segT[i].f += fx*(e-b+1);
if(b!=e){
ll1[left].t += tx;
ll1[right].f += fx;
ll1[left].time = ll1[right].time = cnt;
cnt++;
}
return;
}
update(b, mid, left);
update(mid+1, e, right);
segT[i] = segT[left]+segT[right];
}
void replace(int b, int e, int i){
lazy(b, e, i);
if(b>r or e < l) return;
if(b>=l and e <= r){
ll tt = csum[e-l+1].fi-csum[b-l].fi + tx*(e-b+1);
ll ff = csum[e-l+1].se-csum[b-l].se + fx*(e-b+1);
segT[i].t = tt;
segT[i].f = ff;
if(b!=e){
// ll2[i] = l2();
ll2[left] = l2(l, r, tx, fx, cnt);
ll2[right] = l2(l, r, tx, fx, cnt++);
// ll1[i] = l1();
ll1[left] = l1();
ll1[right] = l1();
}
return;
}
replace(b, mid, left);
replace(mid+1, e, right);
segT[i] = segT[left]+segT[right];
}
nd query(int b, int e, int i){
lazy(b, e, i);
if(b > r or e < l) return nd();
if(b>=l and e <= r) return segT[i];
return query(b, mid, left)+query(mid+1, e, right);
}
int main(){
// ios::sync_with_stdio(false);
#ifdef DBG
freopen("in", "r", stdin);
#endif
init();
int tt;
cin>>tt;
while(tt--){
cnt = 1;
int n, m;
cin>>n>>m;
segT.clear();
arr.clear();
ll1.clear();
ll2.clear();
arr.resize(n);
segT.resize(4*n);
ll1.resize(4*n);
ll2.resize(4*n);
cin>>arr;
build(0, n-1, 0);
ll ans = 0;
fri(i, m){
int kk;
cin>>kk>>l>>r;
l--; r--;
if(kk==1){
cin>>pp;
tx = T(pp);
fx = F(pp);
update(0, n-1, 0);
}
else if(kk==2){
cin>>pp;
tx = T(pp);
fx = F(pp);
replace(0, n-1, 0);
}
else{
ans += query(0, n-1, 0).get();
// cout<<ans<<"\n";
}
}
cout<<ans<<"\n";
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBmcmkoaSxuKSBmb3IoaW50IGk9MDtpPG47aSsrKQojZGVmaW5lIGZyKGksYSxiKSBmb3IoaW50IGk9YTtpPD1iO2krKykKI2RlZmluZSBvbCh2KSB2LmJlZ2luKCksdi5lbmQoKQojZGVmaW5lIGZvcmModikgZm9yKGF1dG8gaXQ6dikKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIHBmIHB1c2hfZnJvbnQKI2RlZmluZSBNWCAxZTE4CiNkZWZpbmUgTU4gLU1YCiNkZWZpbmUgTU9EIDEwMDAwMDAwMDcKI2RlZmluZSBtaWQgKChiK2UpLzIpCiNkZWZpbmUgbGVmdCAoMippKzEpCiNkZWZpbmUgcmlnaHQgKDIqaSsyKQp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKdHlwZWRlZiBsb25nIGRvdWJsZSBsZDsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpc3RyZWFtJm9wZXJhdG9yPj4oaXN0cmVhbSAmaW5wLCB2ZWN0b3I8VD4gJnZlYyl7CglmcmkoaSx2ZWMuc2l6ZSgpKSBpbnA+PnZlY1tpXTsKCXJldHVybiBpbnA7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBvc3RyZWFtJm9wZXJhdG9yPDwob3N0cmVhbSAmb3VwLCB2ZWN0b3I8VD4gdmVjKXsKCWZvcmModmVjKSBvdXA8PGl0PDwiICI7CglvdXA8PCJcbiI7CglyZXR1cm4gb3VwOwp9CgoKY2xhc3MgbDF7cHVibGljOmxsIHQsIGYsIHRpbWU7bDEoKXt0ID0gZiA9IHRpbWUgPSAwO30gbDEobGwgYSwgbGwgYiwgbGwgYyl7dCA9IGEsIGYgPSBiLCB0aW1lID0gYzt9CgkJbDEgb3BlcmF0b3IrKGNvbnN0IGwxICZuKXsKCQkJcmV0dXJuIGwxKHQrbi50LCBmK24uZiwgbWF4KHRpbWUsIG4udGltZSkpOwoJCX0KCQl9OwpjbGFzcyBsMnsgcHVibGljOiBsbCBsLCByLCB0LCBmLCB0aW1lO2wyKCl7bCA9IHIgPSB0ID0gZiA9IHRpbWU9MDt9IGwyKGxsIGEsIGxsIGIsIGxsIGMsIGxsIGQsIGxsIGUpe2wgPSBhOyByID0gYjsgdCA9IGM7IGYgPSBkOyB0aW1lID0gZTt9fTsKCmNsYXNzIG5kewoJcHVibGljOgoJbGwgdCwgZjsKCW5kKCl7CgkJdCA9IGYgPSAwOwoJfQoJbmQobGwgYSwgbGwgYil7CgkJdCA9IGE7IGYgPSBiOwoJfQoJCglsbCBnZXQoKXsKCQlyZXR1cm4gbWluKHQsIGYpOwoJfQoJbmQgb3BlcmF0b3IrKGNvbnN0IG5kICZuKXsKCQlyZXR1cm4gbmQobi50K3QsIG4uZitmKTsKCX0KfTsKCgpsbCBjbnQ7CnZlY3RvcjxsbD4gYXJyOwp2ZWN0b3I8bDE+IGxsMTsKdmVjdG9yPGwyPiBsbDI7CnZlY3RvcjxuZD4gc2VnVDsKCmxsIHR4LCBmeDsKaW50IGwsIHI7CmxsIHBwOwp2ZWN0b3I8cGFpcjxsbCwgbGw+ID4gY3N1bSgxMDAwMDEpOwoKbGwgVChsbCBuKXtsbCBraz0wO3doaWxlKG4+MCBhbmQgbiUyPT0wKXtraysrO24vPTI7fXJldHVybiBrazt9CmxsIEYobGwgbil7bGwga2s9MDt3aGlsZShuPjAgYW5kIG4lNT09MCl7a2srKztuLz01O31yZXR1cm4ga2s7fQoKdm9pZCBpbml0KCl7Cgljc3VtWzBdLmZpID0gY3N1bVswXS5zZSA9IDA7Cgljc3VtWzFdLmZpID0gY3N1bVsxXS5zZSA9IDA7Cglmb3IobGwgaSA9IDI7aTw9MTAwMDAwO2krKyl7CgkJY3N1bVtpXS5maSA9IFQoaSkrY3N1bVtpLTFdLmZpOwoJCWNzdW1baV0uc2UgPSBGKGkpK2NzdW1baS0xXS5zZTsKCX0KfQoKCnZvaWQgYnVpbGQoaW50IGIsIGludCBlLCBpbnQgaSl7CglpZihiPT1lKXsKCQlzZWdUW2ldLnQgPSBUKGFycltiXSk7CgkJc2VnVFtpXS5mID0gRihhcnJbYl0pOwoJCXJldHVybjsKCX0KCWJ1aWxkKGIsIG1pZCwgbGVmdCk7CglidWlsZChtaWQrMSwgZSwgcmlnaHQpOwoJc2VnVFtpXSA9IHNlZ1RbbGVmdF0rc2VnVFtyaWdodF07Cn0KCnZvaWQgZmlyc3QoaW50IGIsIGludCBlLCBpbnQgaSl7CgkKCXNlZ1RbaV0udCArPSBsbDFbaV0udCooZS1iKzEpOwoJc2VnVFtpXS5mICs9IGxsMVtpXS5mKihlLWIrMSk7CgkKCWlmKGIhPWUpewoJCWxsMVtsZWZ0XSA9IGxsMVtsZWZ0XStsbDFbaV07CgkJbGwxW3JpZ2h0XSA9IGxsMVtyaWdodF0rbGwxW2ldOy8vKGxsMVtpXS50LCBsbDFbaV0uZiwgbGwxW2ldLnRpbWUpOwoJfQovLwlsbDFbaV0gPSBsMSgpOwp9Cgp2b2lkIHNlY29uZChpbnQgYiwgaW50IGUsIGludCBpKXsKCQoJc2VnVFtpXS50ID0gY3N1bVtlLWxsMltpXS5sKzFdLmZpIC0gY3N1bVtiLWxsMltpXS5sXS5maSArIGxsMltpXS50KihlLWIrMSk7CglzZWdUW2ldLmYgPSBjc3VtW2UtbGwyW2ldLmwrMV0uc2UgLSBjc3VtW2ItbGwyW2ldLmxdLnNlICsgbGwyW2ldLmYqKGUtYisxKTsKCQoJaWYoYiE9ZSl7CgkJbGwyW2xlZnRdID0gbGwyW2ldOy8vKGxsMltpXS5sLCBsbDJbaV0uciwgbGwyW2ldLnQsIGxsMltpXS5mLCBsbDJbaV0udGltZSk7CgkJbGwyW3JpZ2h0XSA9IGxsMltpXTsvLyhsbDJbaV0ubCwgbGwyW2ldLnIsIGxsMltpXS50LCBsbDJbaV0uZiwgbGwyW2ldLnRpbWUpOwoJfQovLwlsbDJbaV0gPSBsMigpOwp9Cgp2b2lkIGxhenkoaW50IGIsIGludCBlLCBpbnQgaSl7CgoJCglpZihsbDJbaV0udGltZSkgc2Vjb25kKGIsIGUsIGkpOwoJaWYobGwxW2ldLnRpbWUpIGZpcnN0KGIsIGUsIGkpOwoJbGwyW2ldID0gbDIoKTsKCWxsMVtpXSA9IGwxKCk7Cn0KCnZvaWQgdXBkYXRlKGludCBiLCBpbnQgZSwgaW50IGkpewoJbGF6eShiLCBlLCBpKTsKCQoJaWYoYj5yIG9yIGUgPCBsKSByZXR1cm47CglpZihiID49IGwgYW5kIGUgPD0gcil7CgkJc2VnVFtpXS50ICs9IHR4KihlLWIrMSk7CgkJc2VnVFtpXS5mICs9IGZ4KihlLWIrMSk7CgkJaWYoYiE9ZSl7CgkJCWxsMVtsZWZ0XS50ICs9IHR4OwoJCQlsbDFbcmlnaHRdLmYgKz0gZng7CgkJCWxsMVtsZWZ0XS50aW1lID0gbGwxW3JpZ2h0XS50aW1lID0gY250OwoJCQljbnQrKzsKCQl9CgkJcmV0dXJuOwoJfQoJdXBkYXRlKGIsIG1pZCwgbGVmdCk7Cgl1cGRhdGUobWlkKzEsIGUsIHJpZ2h0KTsKCQoJc2VnVFtpXSA9IHNlZ1RbbGVmdF0rc2VnVFtyaWdodF07Cn0KCnZvaWQgcmVwbGFjZShpbnQgYiwgaW50IGUsIGludCBpKXsKCWxhenkoYiwgZSwgaSk7CgkKCWlmKGI+ciBvciBlIDwgbCkgcmV0dXJuOwoJaWYoYj49bCBhbmQgZSA8PSByKXsKCQlsbCB0dCA9IGNzdW1bZS1sKzFdLmZpLWNzdW1bYi1sXS5maSArIHR4KihlLWIrMSk7CgkJbGwgZmYgPSBjc3VtW2UtbCsxXS5zZS1jc3VtW2ItbF0uc2UgKyBmeCooZS1iKzEpOwoJCXNlZ1RbaV0udCA9IHR0OwoJCXNlZ1RbaV0uZiA9IGZmOwoJCWlmKGIhPWUpewovLwkJCWxsMltpXSA9IGwyKCk7CgkJCWxsMltsZWZ0XSA9IGwyKGwsIHIsIHR4LCBmeCwgY250KTsKCQkJbGwyW3JpZ2h0XSA9IGwyKGwsIHIsIHR4LCBmeCwgY250KyspOwovLwkJCWxsMVtpXSA9IGwxKCk7CgkJCWxsMVtsZWZ0XSA9IGwxKCk7CgkJCWxsMVtyaWdodF0gPSBsMSgpOwoJCX0KCQlyZXR1cm47Cgl9CglyZXBsYWNlKGIsIG1pZCwgbGVmdCk7CglyZXBsYWNlKG1pZCsxLCBlLCByaWdodCk7CglzZWdUW2ldID0gc2VnVFtsZWZ0XStzZWdUW3JpZ2h0XTsKfQoKbmQgcXVlcnkoaW50IGIsIGludCBlLCBpbnQgaSl7CglsYXp5KGIsIGUsIGkpOwoJaWYoYiA+IHIgb3IgZSA8IGwpIHJldHVybiBuZCgpOwoJaWYoYj49bCBhbmQgZSA8PSByKSByZXR1cm4gc2VnVFtpXTsKCXJldHVybiBxdWVyeShiLCBtaWQsIGxlZnQpK3F1ZXJ5KG1pZCsxLCBlLCByaWdodCk7Cn0KCgppbnQgbWFpbigpewovLwlpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CgkjaWZkZWYgREJHCgkJZnJlb3BlbigiaW4iLCAiciIsIHN0ZGluKTsKCSNlbmRpZgoJaW5pdCgpOwoJaW50IHR0OwoJY2luPj50dDsKCXdoaWxlKHR0LS0pewoJCWNudCA9IDE7CgkJaW50IG4sIG07CgkJY2luPj5uPj5tOwoJCXNlZ1QuY2xlYXIoKTsKCQlhcnIuY2xlYXIoKTsKCQlsbDEuY2xlYXIoKTsKCQlsbDIuY2xlYXIoKTsKCQlhcnIucmVzaXplKG4pOwoJCXNlZ1QucmVzaXplKDQqbik7CgkJbGwxLnJlc2l6ZSg0Km4pOwoJCWxsMi5yZXNpemUoNCpuKTsKCQljaW4+PmFycjsKCQlidWlsZCgwLCBuLTEsIDApOwoJCWxsIGFucyA9IDA7CgkJZnJpKGksIG0pewoJCQlpbnQga2s7CgkJCWNpbj4+a2s+Pmw+PnI7CgkJCWwtLTsgci0tOwoJCQlpZihraz09MSl7CgkJCQljaW4+PnBwOwoJCQkJdHggPSBUKHBwKTsKCQkJCWZ4ID0gRihwcCk7CgkJCQl1cGRhdGUoMCwgbi0xLCAwKTsKCQkJfQoJCQllbHNlIGlmKGtrPT0yKXsKCQkJCWNpbj4+cHA7CgkJCQl0eCA9IFQocHApOwoJCQkJZnggPSBGKHBwKTsKCQkJCXJlcGxhY2UoMCwgbi0xLCAwKTsKCQkJfQoJCQllbHNlewoJCQkJYW5zICs9IHF1ZXJ5KDAsIG4tMSwgMCkuZ2V0KCk7Ci8vCQkJCWNvdXQ8PGFuczw8IlxuIjsKCQkJfQoJCX0KCQljb3V0PDxhbnM8PCJcbiI7CgkJCgl9CgoJcmV0dXJuIDA7Cgp9