#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;
}
