#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int n, q, type, l, r, x, y, a[N], curdigit[12 * N][10];
long long t[12 * N][10];
void greetings_traveller(int v) {
  memset(t[v], 0, sizeof(t[v]));
  for (int i = 0; i < 10; i++) {
    t[v][curdigit[v + v][i]] += t[v + v][i];
    t[v][curdigit[v + v + 1][i]] += t[v + v + 1][i];
  }
}
void build(int v, int l, int r) {
  for (int i = 0; i < 10; i++) {
    curdigit[v][i] = i;
  }
  if (l == r) {
    int cur = 1;
    while (a[l]) {
      int digit = a[l] % 10;
      t[v][digit] += cur;
      a[l] /= 10;
      cur *= 10;
    }
    return;
  }
  int mid = (r + l) >> 1;
  build(v + v, l, mid);
  build(v + v + 1, mid + 1, r);
  for (int i = 0; i < 10; i++) {
    t[v][i] = t[v + v][i] + t[v + v + 1][i];
  }
}
inline void push(int v) {
  for (int i = 0; i < 10; i++) {
    curdigit[v + v][i] = curdigit[v][curdigit[v + v][i]];
    curdigit[v + v + 1][i] = curdigit[v][curdigit[v + v + 1][i]];
  }
  for (int i = 0; i < 10; i++) {
    curdigit[v][i] = i;
  }
}
void update(int v, int l, int r, int tl, int tr, int x, int y) {
  if (l > r || l > tr || tl > r) {
    return;
  }
  if (tl <= l && r <= tr) {
    for (int i = 0; i < 10; i++) {
      if (curdigit[v][i] == x) {
        curdigit[v][i] = y;
      }
    }
    return;
  }
  push(v);
  int mid = (r + l) >> 1;
  update(v + v, l, mid, tl, tr, x, y);
  update(v + v + 1, mid + 1, r, tl, tr, x, y);
  greetings_traveller(v);
}
long long get(int v, int l, int r, int tl, int tr) {
  if (l > r || l > tr || tl > r) {
    return 0;
  }
  if (tl <= l && r <= tr) {
    long long ans = 0;
    for (int i = 0; i < 10; i++) {
      ans += 1ll * curdigit[v][i] * t[v][i];
    }
    return ans;
  }
  push(v);
  int mid = (r + l) >> 1;
  long long res =
      get(v + v, l, mid, tl, tr) + get(v + v + 1, mid + 1, r, tl, tr);
  greetings_traveller(v);
  return res;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> q;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
  }
  build(1, 1, n);
  for (int i = 1; i <= q; i++) {
    cin >> type >> l >> r;
    if (type == 1) {
      cin >> x >> y;
      update(1, 1, n, l, r, x, y);
    } else {
      cout << get(1, 1, n, l, r) << "\n";
    }
  }
}
