#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,m,mxa=0,a[300005],d[1000006],bit[300005];
multiset <int> mse;
void UPDATE(int i, int v)
{
while (i<=n) bit[i]+=v,i+=i&(-i);
return;
}
int GET(int l, int r)
{
l--;
int resl=0,resr=0;
while (l>0) resl+=bit[l],l-=l&(-l);
while (r>0) resr+=bit[r],r-=r&(-r);
return resr-resl;
}
signed main()
{
ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>n>>m;
for (int i=1;i<=n;i++) cin>>a[i],mxa=max(mxa,a[i]),UPDATE(i,a[i]);
for (int i=1;i<=mxa;i++) for (int j=i;j<=mxa;j+=i) d[j]++;
for (int i=1;i<=n;i++)
{
int cnt=0,vl=a[i];
while (vl>2) cnt++,vl=d[vl];
for (int j=1;j<=cnt;j++) mse.insert(i);
}
for (int i=1;i<=m;i++)
{
int t,l,r;
cin>>t>>l>>r;
if (t==1)
{
int idx=l;
while (*mse.lower_bound(idx)>=l && *mse.lower_bound(idx)<=r)
{
idx=*mse.lower_bound(idx);
UPDATE(idx,d[a[idx]]-a[idx]),a[idx]=d[a[idx]];
if (mse.find(idx)!=mse.end()) mse.erase(mse.find(idx));
if (mse.upper_bound(idx)==mse.end()) break;
else idx=*mse.upper_bound(idx);
}
}
else cout<<GET(l,r)<<'\n';
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgaW50IGxvbmcgbG9uZwp1c2luZyBuYW1lc3BhY2Ugc3RkOwppbnQgbixtLG14YT0wLGFbMzAwMDA1XSxkWzEwMDAwMDZdLGJpdFszMDAwMDVdOwptdWx0aXNldCA8aW50PiBtc2U7CnZvaWQgVVBEQVRFKGludCBpLCBpbnQgdikKewogICAgd2hpbGUgKGk8PW4pIGJpdFtpXSs9dixpKz1pJigtaSk7CiAgICByZXR1cm47Cn0KaW50IEdFVChpbnQgbCwgaW50IHIpCnsKICAgIGwtLTsKICAgIGludCByZXNsPTAscmVzcj0wOwogICAgd2hpbGUgKGw+MCkgcmVzbCs9Yml0W2xdLGwtPWwmKC1sKTsKICAgIHdoaWxlIChyPjApIHJlc3IrPWJpdFtyXSxyLT1yJigtcik7CiAgICByZXR1cm4gcmVzci1yZXNsOwp9CnNpZ25lZCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSksY2luLnRpZSgwKSxjb3V0LnRpZSgwKTsKICAgIGNpbj4+bj4+bTsKICAgIGZvciAoaW50IGk9MTtpPD1uO2krKykgY2luPj5hW2ldLG14YT1tYXgobXhhLGFbaV0pLFVQREFURShpLGFbaV0pOwogICAgZm9yIChpbnQgaT0xO2k8PW14YTtpKyspIGZvciAoaW50IGo9aTtqPD1teGE7ais9aSkgZFtqXSsrOwogICAgZm9yIChpbnQgaT0xO2k8PW47aSsrKQogICAgewogICAgICAgIGludCBjbnQ9MCx2bD1hW2ldOwogICAgICAgIHdoaWxlICh2bD4yKSBjbnQrKyx2bD1kW3ZsXTsKICAgICAgICBmb3IgKGludCBqPTE7ajw9Y250O2orKykgbXNlLmluc2VydChpKTsKICAgIH0KICAgIGZvciAoaW50IGk9MTtpPD1tO2krKykKICAgIHsKICAgICAgICBpbnQgdCxsLHI7CiAgICAgICAgY2luPj50Pj5sPj5yOwogICAgICAgIGlmICh0PT0xKQogICAgICAgIHsKICAgICAgICAgICAgaW50IGlkeD1sOwogICAgICAgICAgICB3aGlsZSAoKm1zZS5sb3dlcl9ib3VuZChpZHgpPj1sICYmICptc2UubG93ZXJfYm91bmQoaWR4KTw9cikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWR4PSptc2UubG93ZXJfYm91bmQoaWR4KTsKICAgICAgICAgICAgICAgIFVQREFURShpZHgsZFthW2lkeF1dLWFbaWR4XSksYVtpZHhdPWRbYVtpZHhdXTsKICAgICAgICAgICAgICAgIGlmIChtc2UuZmluZChpZHgpIT1tc2UuZW5kKCkpIG1zZS5lcmFzZShtc2UuZmluZChpZHgpKTsKICAgICAgICAgICAgICAgIGlmIChtc2UudXBwZXJfYm91bmQoaWR4KT09bXNlLmVuZCgpKSBicmVhazsKICAgICAgICAgICAgICAgIGVsc2UgaWR4PSptc2UudXBwZXJfYm91bmQoaWR4KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIGNvdXQ8PEdFVChsLHIpPDwnXG4nOwogICAgfQogICAgcmV0dXJuIDA7Cn0K