#include <bits/stdc++.h>
#pragma GCC optimize("Ofast,no-stack-protector")
#pragma GCC target( \
    "sse,sse2,sse3,sse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("fast-math")
using namespace std;
const int INF = 1e9 + 9;
const long long MAXN = 5e5 + 7;
const long long MAXN1 = 21;
const long long MAXN2 = 1e6 + 7;
const long long MOD = 998244353;
const long long PW = 31;
const long long BLOCK = 447;
void solve();
mt19937 mt(1e9 + 7);
signed main() {
  srand('a' + 'l' + 'e' + 'x' + 'X' + '5' + '1' + '2');
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int q = 1;
  if (0) cin >> q;
  while (q--) solve();
}
long long cnt[100];
struct Segment {
  long long sum, _sum, sum_, _sum_;
  int first, last, len;
  Segment() : sum(1), _sum(1), sum_(1), _sum_(1), first(0), last(0), len(1) {}
  Segment operator+(const Segment& other) const {
    Segment now;
    now.last = other.last;
    now.first = first;
    now.len = len + other.len;
    now.sum = (sum * other.sum % MOD + (last == 1 ? 1 : 0) * sum_ *
                                           cnt[last * 10 + other.first] % MOD *
                                           other._sum) %
              MOD;
    now._sum = (_sum * other.sum % MOD +
                (last == 1 && len > 1 ? 1 : 0) * _sum_ *
                    cnt[last * 10 + other.first] % MOD * other._sum) %
               MOD;
    now.sum_ = (sum * other.sum_ % MOD +
                (last == 1 && other.len > 1 ? 1 : 0) * sum_ *
                    cnt[last * 10 + other.first] % MOD * other._sum_) %
               MOD;
    now._sum_ = (_sum * other.sum_ % MOD +
                 (last == 1 && other.len > 1 && len > 1 ? 1 : 0) * _sum_ *
                     cnt[last * 10 + other.first] % MOD * other._sum_) %
                MOD;
    return now;
  }
};
Segment v[4 * MAXN];
void upd(int vert, int tl, int tr, int id, int now) {
  if (tl == tr) {
    v[vert].sum = cnt[now];
    v[vert].last = v[vert].first = now;
    return;
  }
  int tm = (tl + tr) / 2;
  if (id <= tm)
    upd(vert << 1, tl, tm, id, now);
  else
    upd(vert << 1 | 1, tm + 1, tr, id, now);
  v[vert] = v[vert << 1] + v[vert << 1 | 1];
}
int get() { return v[1].sum; }
void solve() {
  for (int i = 0; i < 10; ++i) {
    for (int j = 0; j < 10; ++j) {
      ++cnt[i + j];
    }
  }
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < n; ++i) {
    char ch;
    cin >> ch;
    upd(1, 0, n - 1, i, ch - '0');
  }
  for (int i = 0; i < m; ++i) {
    int x, d;
    cin >> x >> d;
    upd(1, 0, n - 1, x - 1, d);
    cout << get() << "\n";
  }
}
