#include <bits/stdc++.h>
using namespace std;
const int N = 2000006;
const int MOD = 1e9 + 7;
using namespace std;
int n, qr;
int in[N];
struct data {
  long long sm[10];
  int nt[10];
};
data T[N];
long long cnt[10], res;
void Merge(data &m, data &l, data &r) {
  for (int i = 0; i < 10; i++) {
    m.sm[i] = l.sm[i] + r.sm[i];
    m.nt[i] = i;
  }
}
void pushDown(int node) {
  int lf = node << 1;
  int rt = lf | 1;
  memset(cnt, 0, sizeof cnt);
  for (int i = 0; i < 10; i++) {
    T[lf].nt[i] = T[node].nt[T[lf].nt[i]];
    T[rt].nt[i] = T[node].nt[T[rt].nt[i]];
    cnt[T[node].nt[i]] += T[node].sm[i];
  }
  for (int i = 0; i < 10; i++) {
    T[node].sm[i] = cnt[i];
    T[node].nt[i] = i;
  }
}
void built(int node, int b, int e) {
  if (b == e) {
    long long v = in[b];
    long long t = 1;
    while (v) {
      T[node].sm[v % 10] += t;
      t *= 10;
      v /= 10;
    }
    for (int i = 0; i < 10; i++) T[node].nt[i] = i;
    return;
  }
  int mid = b + e >> 1;
  int lf = node << 1;
  int rt = lf | 1;
  built(lf, b, mid);
  built(rt, mid + 1, e);
  Merge(T[node], T[lf], T[rt]);
}
void update(int node, int b, int e, int i, int j, int from, int to) {
  pushDown(node);
  if (b > j || e < i) return;
  if (b >= i && e <= j) {
    T[node].nt[from] = to;
    pushDown(node);
    return;
  }
  int mid = b + e >> 1;
  int lf = node << 1;
  int rt = lf | 1;
  update(lf, b, mid, i, j, from, to);
  update(rt, mid + 1, e, i, j, from, to);
  Merge(T[node], T[lf], T[rt]);
}
void query(int node, int b, int e, int i, int j) {
  pushDown(node);
  if (b > j || e < i) return;
  if (b >= i && e <= j) {
    for (int i = 0; i < 10; i++) res += T[node].sm[i] * i;
    return;
  }
  int mid = b + e >> 1;
  int lf = node << 1;
  int rt = lf | 1;
  query(lf, b, mid, i, j);
  query(rt, mid + 1, e, i, j);
}
int main() {
  scanf("%d %d", &n, &qr);
  for (int i = 1; i <= n; i++) scanf("%d", &in[i]);
  built(1, 1, n);
  while (qr--) {
    int f, l, r, from, to;
    scanf("%d %d %d", &f, &l, &r);
    if (f == 2) {
      res = 0;
      query(1, 1, n, l, r);
      printf("%lld\n", res);
    } else {
      scanf("%d %d", &from, &to);
      update(1, 1, n, l, r, from, to);
    }
  }
  return 0;
}
