#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
struct node {
  long long v[10];
  int tag[10];
  void init(int x) {
    int y = 1;
    memset(v, 0, sizeof(v));
    while (x) {
      v[x % 10] += y;
      x /= 10;
      y *= 10;
    }
  }
  void updtag(int* _tag) {
    for (int i = 0; i < 10; i++) tag[i] = _tag[tag[i]];
  }
  bool havetag() {
    for (int i = 0; i < 10; i++)
      if (tag[i] != i) return 1;
    return 0;
  }
} f[N * 4];
int a[N];
int n, q;
int tag[10];
long long ans;
void upd(int s) {
  for (int i = 0; i < 10; i++) f[s].v[i] = f[s + s].v[i] + f[s + s + 1].v[i];
}
void build(int l, int r, int s) {
  for (int i = 0; i < 10; i++) f[s].tag[i] = i;
  if (l == r) {
    f[s].init(a[l]);
    return;
  }
  build(l, (l + r) / 2, s + s);
  build((l + r) / 2 + 1, r, s + s + 1);
  upd(s);
}
long long tmp[10] = {0};
void down(int l, int r, int s) {
  if (!f[s].havetag()) return;
  for (int i = 0; i < 10; i++) tmp[f[s].tag[i]] += f[s].v[i];
  for (int i = 0; i < 10; i++) f[s].v[i] = tmp[i], tmp[i] = 0;
  if (l != r) f[s + s].updtag(f[s].tag), f[s + s + 1].updtag(f[s].tag);
  for (int i = 0; i < 10; i++) f[s].tag[i] = i;
}
void change(int l, int r, int s, int ll, int rr) {
  down(l, r, s);
  if (r < ll || rr < l) return;
  if (ll <= l && r <= rr) {
    f[s].updtag(tag);
    down(l, r, s);
    return;
  }
  change(l, (l + r) / 2, s + s, ll, rr);
  change((l + r) / 2 + 1, r, s + s + 1, ll, rr);
  upd(s);
}
void get(int l, int r, int s, int ll, int rr) {
  down(l, r, s);
  if (r < ll || rr < l) return;
  if (ll <= l && r <= rr) {
    for (int i = 1; i < 10; i++) ans += f[s].v[i] * i;
    return;
  }
  get(l, (l + r) / 2, s + s, ll, rr);
  get((l + r) / 2 + 1, r, s + s + 1, ll, rr);
}
int main() {
  scanf("%d %d", &n, &q);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
  }
  build(1, n, 1);
  while (q--) {
    int sig, l, r, x, y;
    scanf("%d %d %d", &sig, &l, &r);
    if (sig == 1) {
      scanf("%d %d", &x, &y);
      for (int i = 0; i < 10; i++) tag[i] = i;
      tag[x] = y;
      change(1, n, 1, l, r);
      continue;
    }
    ans = 0;
    get(1, n, 1, l, r);
    printf("%lld\n", ans);
  }
  return 0;
}
