#include<bits/stdc++.h>  
using namespace std;  
  
#define fast ios::sync_with_stdio(false);cin.tie(NULL)  
#define fi first  
#define se second  
#define all(v) (v).begin(),(v).end()  
#define pb push_back  
#define eb emplace_back
#define em emplace
#define mp make_pair
  
typedef long long ll;  
typedef pair<int,int> pii;  
typedef pair<ll,ll> pll;  
const long long INF = 1e18;  
const int inf = 1e9;
const ll Mod = 998244353;

int n, q;

ll p[200010];
ll dp[200010];
ll tree[800010];
ll lazy[800010];

void propagate(int node, int s, int e) {
	if(!lazy[node]) return;

	tree[node] = (dp[e] - dp[s-1] + Mod) % Mod * lazy[node] % Mod;

	if(s != e) {
		lazy[node*2] = lazy[node*2+1] = lazy[node];
	}

	lazy[node] = 0;
}

void update(int node, int s, int e, int l, int r, int x) {
	propagate(node, s, e);
	if(r < s || e < l) return;
	if(l <= s && e <= r) {
		lazy[node] = x;
		propagate(node, s, e);
		return;
	}

	update(node*2, s, (s+e)/2, l, r, x);
	update(node*2+1, (s+e)/2+1, e, l, r, x);

	tree[node] = (tree[node*2] + tree[node*2+1]) % Mod;
}

int main() {
	fast;

	cin >> n >> q;

	for(int i=1; i<=n; i++) {
		dp[i] = (dp[i-1] * 10 + 1) % Mod;
	}

	update(1, 1, n, 1, n, 1);

	while(q--) {
		int l, r, d;
		cin >> l >> r >> d;

		update(1, 1, n, n - r + 1, n - l + 1, d); 

		cout << tree[1] << "\n";
	}
}