#include<bits/stdc++.h>
using namespace std;
const int N=3e5+5,A=1e6+5;
long long n,m;
int a[N],c[N];
int lowbit(int x){return x&-x;}
void update(int x,int k){
while(x<=n)c[x]+=k,x+=lowbit(x);
}
int query(int x){
int sum=0;
while(x)sum+=c[x],x-=lowbit(x);
return sum;
}
int f[N];
int find(int x)
{
if(f[x]==x)return x;
return f[x]=find(f[x]);
}
int cnt[A];
void init(int x)
{
for(int i=1;i<=x;i++)
for(int j=1;j<=x/i;j++)
cnt[i*j]++;
}
int main()
{
ios::sync_with_stdio(false);
cin>>n>>m;
init(1e6);
for(int i=1;i<=n;i++){
cin>>a[i];
update(i,a[i]);
f[i]=i;
}
while(m--)
{
int t,l,r;
cin>>t>>l>>r;
if(t==1){
for(int i=l;i<=r;i++)
{
i=find(i);
if(i>r)break;
update(i,cnt[a[i]]-a[i]);
a[i]=cnt[a[i]];
if(cnt[a[i]]==a[i])f[i]=find(i+1);
}
}
else{
cout<<query(r)-query(l-1)<<'\n';
}
}
return 0;
}