#include <bits/stdc++.h>
using namespace std;
#define MOD 1000000007
#define ll long long
vector<int> divs[100001];
ll sum[100001],a[100001];
int n;
void pre(){
ll ss;
for(int i=1;i<=n;i++){
ss=0;
for(int j=i;j<=n;j+=i){
ss = (ss + a[j] ) % MOD;
}
sum[i] = ss;
}
}
void getdivs(){
for(int i=1;i<=100000;i++){
for(int j=i;j<=100000;j+=i){
divs[i].push_back(j);
}
}
}
int main() {
int test,x,y,q,h;
ll z;
scanf("%d",&test);
getdivs();
while(test--){
scanf("%d %d",&n,&q);
for(int i=1;i<=n;i++){scanf("%d",a+i);a[i] = a[i]*a[i] %MOD;sum[i]=0;}
pre();
while(q--){
scanf("%d %d",&x,&y);
if(x==1){
printf("%lld\n",sum[y]);
}
else{
scanf("%lld",&z);
z = (z*z )%MOD;
for(int d:divs[y]){
sum[d] = (sum[d] - a[y] + z + MOD )% MOD;
}
a[y] = z;
}
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgTU9EIDEwMDAwMDAwMDcKI2RlZmluZSBsbCBsb25nIGxvbmcKdmVjdG9yPGludD4gZGl2c1sxMDAwMDFdOwpsbCBzdW1bMTAwMDAxXSxhWzEwMDAwMV07CmludCBuOwp2b2lkIHByZSgpewoJbGwgc3M7Cglmb3IoaW50IGk9MTtpPD1uO2krKyl7CgkJc3M9MDsKCQlmb3IoaW50IGo9aTtqPD1uO2orPWkpewoJCQlzcyA9IChzcyArIGFbal0gKSAlIE1PRDsKCQl9CgkJc3VtW2ldID0gc3M7Cgl9Cn0Kdm9pZCBnZXRkaXZzKCl7Cglmb3IoaW50IGk9MTtpPD0xMDAwMDA7aSsrKXsKCQlmb3IoaW50IGo9aTtqPD0xMDAwMDA7ais9aSl7CgkJCWRpdnNbaV0ucHVzaF9iYWNrKGopOwoJCX0KCX0KfQppbnQgbWFpbigpIHsKCWludCB0ZXN0LHgseSxxLGg7CglsbCB6OwoJc2NhbmYoIiVkIiwmdGVzdCk7CglnZXRkaXZzKCk7Cgl3aGlsZSh0ZXN0LS0pewoJCXNjYW5mKCIlZCAlZCIsJm4sJnEpOwoJCWZvcihpbnQgaT0xO2k8PW47aSsrKXtzY2FuZigiJWQiLGEraSk7YVtpXSA9IGFbaV0qYVtpXSAlTU9EO3N1bVtpXT0wO30KCQlwcmUoKTsKCQl3aGlsZShxLS0pewoJCQlzY2FuZigiJWQgJWQiLCZ4LCZ5KTsKCQkJaWYoeD09MSl7CgkJCQlwcmludGYoIiVsbGRcbiIsc3VtW3ldKTsKCQkJfQoJCQllbHNlewoJCQkJc2NhbmYoIiVsbGQiLCZ6KTsKCQkJCXogPSAoeip6ICklTU9EOwoJCQkJZm9yKGludCBkOmRpdnNbeV0pewoJCQkJCXN1bVtkXSA9IChzdW1bZF0gLSBhW3ldICsgeiArIE1PRCApJSBNT0Q7CgkJCQl9CgkJCQlhW3ldID0gejsKCQkJfQoJCX0KCX0KCXJldHVybiAwOwp9