#include <bits/stdc++.h>
using namespace std;
#define faster ios::sync_with_stdio(5+2==2006); cin.tie(0); cout.tie(0);
#define ll long long
#define maxn 200005
ll seg[10][4*maxn];
ll a[maxn];
bool check(int n, int k){
while (n){
if ((n%10)==k) return true;
n/=10;
}
return false;
}
int heso(int n, int k){
if (n%k==0||check(n,k)) return 2;
return 1;
}
void build(int k, int id, int l ,int r){
if (l==r){
seg[k][id]=a[l] * heso(l, k);return;
}
int mid=(l+r)/2;
build(k, id*2, l, mid);
build(k,id*2+1,mid+1,r);
seg[k][id]=(seg[k][id*2+1]+seg[k][id*2]);
}
void update(int k, int id, int l ,int r,int pos, int x){
if (l==r){
seg[k][id]=x*heso(l,k); return;
}
int mid=(l+r)/2;
if (pos<=mid) update(k,id*2,l,mid,pos,x);
else update(k,id*2+1,mid+1,r,pos,x);
seg[k][id]=(seg[k][id*2]+seg[k][id*2+1]);
}
ll query(int k, int id, int l, int r, int u ,int v){
if (u>r || v<l) return 1+1>2;
if (u<=l && v>=r) return seg[k][id];
int mid=(l+r)/2;
return query(k,id*2,l,mid,u,v)+query(k,id*2+1,mid+1,r,u,v);
}
int main(){
faster;
int n,q;cin>>n>>q;
for (int i=1;i<=n;i++) cin>>a[i];
for (int k=1;k<=9;k++) build(k,1,1,n);
while (q--){
int type;cin>>type;
if (type==1){
int i,c;cin>>i>>c;
for (int k=1;k<=9;k++) update(k,1,1,n,i,c);
}
else{
int l,r,k;cin>>l>>r>>k;
cout<<query(k,1,1,n,l,r)<<"\n";
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgZmFzdGVyIGlvczo6c3luY193aXRoX3N0ZGlvKDUrMj09MjAwNik7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIG1heG4gMjAwMDA1CmxsIHNlZ1sxMF1bNCptYXhuXTsKbGwgYVttYXhuXTsKYm9vbCBjaGVjayhpbnQgbiwgaW50IGspewogICAgd2hpbGUgKG4pewogICAgICAgIGlmICgobiUxMCk9PWspIHJldHVybiB0cnVlOwogICAgICAgIG4vPTEwOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9CmludCBoZXNvKGludCBuLCBpbnQgayl7CiAgICBpZiAobiVrPT0wfHxjaGVjayhuLGspKSByZXR1cm4gMjsKICAgIHJldHVybiAxOwp9Cgp2b2lkIGJ1aWxkKGludCBrLCBpbnQgaWQsIGludCBsICxpbnQgcil7CiAgICBpZiAobD09cil7CiAgICAgICAgc2VnW2tdW2lkXT1hW2xdICogaGVzbyhsLCBrKTtyZXR1cm47CiAgICB9CiAgICBpbnQgbWlkPShsK3IpLzI7CiAgICBidWlsZChrLCBpZCoyLCBsLCBtaWQpOwogICAgYnVpbGQoayxpZCoyKzEsbWlkKzEscik7CiAgICBzZWdba11baWRdPShzZWdba11baWQqMisxXStzZWdba11baWQqMl0pOwp9CnZvaWQgdXBkYXRlKGludCBrLCBpbnQgaWQsIGludCBsICxpbnQgcixpbnQgcG9zLCBpbnQgeCl7CiAgICBpZiAobD09cil7CiAgICAgICAgc2VnW2tdW2lkXT14Kmhlc28obCxrKTsgcmV0dXJuOwogICAgfQogICAgaW50IG1pZD0obCtyKS8yOwogICAgaWYgKHBvczw9bWlkKSB1cGRhdGUoayxpZCoyLGwsbWlkLHBvcyx4KTsKICAgIGVsc2UgdXBkYXRlKGssaWQqMisxLG1pZCsxLHIscG9zLHgpOwogICAgc2VnW2tdW2lkXT0oc2VnW2tdW2lkKjJdK3NlZ1trXVtpZCoyKzFdKTsKfQpsbCBxdWVyeShpbnQgaywgaW50IGlkLCBpbnQgbCwgaW50IHIsIGludCB1ICxpbnQgdil7CiAgICBpZiAodT5yIHx8IHY8bCkgcmV0dXJuIDErMT4yOwogICAgaWYgKHU8PWwgJiYgdj49cikgcmV0dXJuIHNlZ1trXVtpZF07CiAgICBpbnQgbWlkPShsK3IpLzI7CiAgICByZXR1cm4gcXVlcnkoayxpZCoyLGwsbWlkLHUsdikrcXVlcnkoayxpZCoyKzEsbWlkKzEscix1LHYpOwp9CmludCBtYWluKCl7CiAgICBmYXN0ZXI7CiAgICBpbnQgbixxO2Npbj4+bj4+cTsKICAgIGZvciAoaW50IGk9MTtpPD1uO2krKykgY2luPj5hW2ldOwogICAgZm9yIChpbnQgaz0xO2s8PTk7aysrKSBidWlsZChrLDEsMSxuKTsKICAgIHdoaWxlIChxLS0pewogICAgICAgIGludCB0eXBlO2Npbj4+dHlwZTsKICAgICAgICBpZiAodHlwZT09MSl7CiAgICAgICAgICAgIGludCBpLGM7Y2luPj5pPj5jOwogICAgICAgICAgICBmb3IgKGludCBrPTE7azw9OTtrKyspIHVwZGF0ZShrLDEsMSxuLGksYyk7CiAgICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICAgIGludCBsLHIsaztjaW4+Pmw+PnI+Pms7CiAgICAgICAgICAgIGNvdXQ8PHF1ZXJ5KGssMSwxLG4sbCxyKTw8IlxuIjsKICAgICAgICB9CiAgICB9CgoKCgoKICAgIHJldHVybiAwOwp9Cg==