#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 50, INF = 0, MOD = 0;
int n, q, a[N];
long long seg[4 * N][15], lazy[4 * N][15], tmp[4 * N][15];
void shift(int id) {
  for (int i = 0; i < 10; i++) {
    tmp[id * 2][i] = seg[id * 2][i];
    tmp[id * 2 + 1][i] = seg[id * 2 + 1][i];
    seg[id * 2][i] = 0, seg[id * 2 + 1][i] = 0;
    lazy[id * 2][i] = lazy[id][lazy[id * 2][i]];
    lazy[id * 2 + 1][i] = lazy[id][lazy[id * 2 + 1][i]];
  }
  for (int i = 0; i < 10; i++) {
    seg[id * 2][lazy[id][i]] += tmp[id * 2][i];
    seg[id * 2 + 1][lazy[id][i]] += tmp[id * 2 + 1][i];
  }
  for (int i = 0; i < 10; i++) lazy[id][i] = i;
  return;
}
void add(int ql, int qr, long long val, int in, int l = 0, int r = n,
         int id = 1) {
  if (ql >= r || qr <= l) return;
  if (ql <= l && qr >= r) {
    seg[id][in] += val;
    return;
  }
  int mid = (l + r) / 2;
  add(ql, qr, val, in, l, mid, id * 2);
  add(ql, qr, val, in, mid, r, id * 2 + 1);
  for (int i = 0; i < 10; i++) seg[id][i] = seg[id * 2][i] + seg[id * 2 + 1][i];
  return;
}
void upd(int ql, int qr, int in1, int in2, int l = 0, int r = n, int id = 1) {
  if (in1 == in2) return;
  if (qr <= l || ql >= r) return;
  if (ql <= l && qr >= r) {
    for (int i = 0; i < 10; i++) {
      tmp[id][i] = seg[id][i];
      if (lazy[id][i] == in1) lazy[id][i] = in2;
    }
    for (int i = 0; i < 10; i++) {
      if (i == in1)
        seg[id][i] = 0;
      else if (i == in2)
        seg[id][i] = tmp[id][in1] + tmp[id][in2];
      else
        seg[id][i] = tmp[id][i];
    }
    return;
  }
  int mid = (l + r) / 2;
  shift(id);
  upd(ql, qr, in1, in2, l, mid, id * 2);
  upd(ql, qr, in1, in2, mid, r, id * 2 + 1);
  for (int i = 0; i < 10; i++) seg[id][i] = seg[id * 2][i] + seg[id * 2 + 1][i];
  return;
}
long long get(int ql, int qr, int l = 0, int r = n, int id = 1) {
  if (ql >= r || qr <= l) return 0;
  if (ql <= l && qr >= r) {
    long long ans = 0;
    for (int i = 0; i < 10; i++) ans += seg[id][i] * i;
    return ans;
  }
  shift(id);
  int mid = (l + r) / 2;
  return get(ql, qr, l, mid, id * 2) + get(ql, qr, mid, r, id * 2 + 1);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  for (int i = 0; i < 4 * N; i++)
    for (int j = 0; j < 13; j++) lazy[i][j] = j;
  cin >> n >> q;
  for (int i = 0; i < n; i++) cin >> a[i];
  long long tmp = 1;
  for (int j = 0; j < 10; j++) {
    for (int i = 0; i < n; i++) {
      long long x = (a[i] / tmp) % 10;
      if (a[i] / tmp == 0) continue;
      add(i, i + 1, tmp, x);
    }
    tmp *= 10;
  }
  for (int i = 0, t, l, r, x, y; i < q; i++) {
    cin >> t >> l >> r;
    l--;
    if (t == 1) {
      cin >> x >> y;
      upd(l, r, x, y);
    } else
      cout << get(l, r) << '\n';
  }
  return 0;
}
