#include <bits/stdc++.h>
#define ll long long
#define el cout << '\n'
#define bit(mask, i) (((mask) >> (i)) & 1)
using namespace std;
struct Query
{
int l, r, x;
Query(int l = 0, int r = 0, int x = 0) :
l(l), r(r), x(x) {};
};
const int maxn = 5e5;
const int maxk = 30;
const int MOD = 998244353;
int n, k, q, a[maxn + 10], mx[maxn + 10];
Query queries[maxn + 10];
ll ans = 1, dp[maxn + 10], pre[maxn + 10];
ll cnt_ways(int k)
{
memset(a, 0, sizeof a);
memset(mx, 0, sizeof mx);
memset(dp, 0, sizeof dp);
for (int i = 1; i <= q; i++)
{
auto [l, r, x] = queries[i];
if (!bit(x, k))
{
mx[r] = max(mx[r], l);
continue;
}
a[l]++;
a[r + 1]--;
}
int sum = 0;
dp[0] = 1;
pre[0] = 1;
// cout << k, el;
for (int i = 1; i <= n + 1; i++)
{
mx[i] = max(mx[i], mx[i - 1]);
sum += a[i];
a[i] = min(1, sum);
if (a[i] == 1)
dp[i] = 0;
else if (mx[i - 1])
dp[i] = (pre[i - 1] - pre[mx[i - 1] - 1]) % MOD;
else
dp[i] = pre[i - 1];
(pre[i] = pre[i - 1] + dp[i]) %= MOD;
// cout << a[i] << ' ';
}
// el;
// for (int i = 1; i <= n + 1; i++)
// cout << mx[i] << ' ';
// el;
// for (int i = 1; i <= n + 1; i++)
// cout << dp[i] << ' ';
return dp[n + 1];
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if (fopen("ANDSEG.INP", "r"))
{
freopen("ANDSEG.INP", "r", stdin);
freopen("ANDSEG.OUT", "w", stdout);
}
cin >> n >> k >> q;
for (int i = 1; i <= q; i++)
{
int l, r, x;
cin >> l >> r >> x;
queries[i] = Query(l, r, x);
}
for (int i = k - 1; i >= 0; i--)
(ans *= cnt_ways(i)) %= MOD;
cout << (ans + MOD) % MOD;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGVsIGNvdXQgPDwgJ1xuJwojZGVmaW5lIGJpdChtYXNrLCBpKSAoKChtYXNrKSA+PiAoaSkpICYgMSkKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgUXVlcnkKewogICAgaW50IGwsIHIsIHg7CgogICAgUXVlcnkoaW50IGwgPSAwLCBpbnQgciA9IDAsIGludCB4ID0gMCkgOgogICAgICAgIGwobCksIHIociksIHgoeCkge307Cn07Cgpjb25zdCBpbnQgbWF4biA9IDVlNTsKY29uc3QgaW50IG1heGsgPSAzMDsKY29uc3QgaW50IE1PRCA9IDk5ODI0NDM1MzsKCmludCBuLCBrLCBxLCBhW21heG4gKyAxMF0sIG14W21heG4gKyAxMF07ClF1ZXJ5IHF1ZXJpZXNbbWF4biArIDEwXTsKbGwgYW5zID0gMSwgZHBbbWF4biArIDEwXSwgcHJlW21heG4gKyAxMF07CgpsbCBjbnRfd2F5cyhpbnQgaykKewogICAgbWVtc2V0KGEsIDAsIHNpemVvZiBhKTsKICAgIG1lbXNldChteCwgMCwgc2l6ZW9mIG14KTsKICAgIG1lbXNldChkcCwgMCwgc2l6ZW9mIGRwKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKICAgIHsKICAgICAgICBhdXRvIFtsLCByLCB4XSA9IHF1ZXJpZXNbaV07CiAgICAgICAgaWYgKCFiaXQoeCwgaykpCiAgICAgICAgewogICAgICAgICAgICBteFtyXSA9IG1heChteFtyXSwgbCk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBhW2xdKys7CiAgICAgICAgYVtyICsgMV0tLTsKICAgIH0KICAgIGludCBzdW0gPSAwOwogICAgZHBbMF0gPSAxOwogICAgcHJlWzBdID0gMTsKLy8gICAgY291dCA8PCBrLCBlbDsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG4gKyAxOyBpKyspCiAgICB7CiAgICAgICAgbXhbaV0gPSBtYXgobXhbaV0sIG14W2kgLSAxXSk7CiAgICAgICAgc3VtICs9IGFbaV07CiAgICAgICAgYVtpXSA9IG1pbigxLCBzdW0pOwogICAgICAgIGlmIChhW2ldID09IDEpCiAgICAgICAgICAgIGRwW2ldID0gMDsKICAgICAgICBlbHNlIGlmIChteFtpIC0gMV0pCiAgICAgICAgICAgIGRwW2ldID0gKHByZVtpIC0gMV0gLSBwcmVbbXhbaSAtIDFdIC0gMV0pICUgTU9EOwogICAgICAgIGVsc2UKICAgICAgICAgICAgZHBbaV0gPSBwcmVbaSAtIDFdOwogICAgICAgIChwcmVbaV0gPSBwcmVbaSAtIDFdICsgZHBbaV0pICU9IE1PRDsKLy8gICAgICAgIGNvdXQgPDwgYVtpXSA8PCAnICc7CiAgICB9Ci8vICAgIGVsOwovLyAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuICsgMTsgaSsrKQovLyAgICAgICAgY291dCA8PCBteFtpXSA8PCAnICc7Ci8vICAgIGVsOwovLyAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuICsgMTsgaSsrKQovLyAgICAgICAgY291dCA8PCBkcFtpXSA8PCAnICc7CiAgICByZXR1cm4gZHBbbiArIDFdOwp9CgppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwogICAgaWYgKGZvcGVuKCJBTkRTRUcuSU5QIiwgInIiKSkKICAgIHsKICAgICAgICBmcmVvcGVuKCJBTkRTRUcuSU5QIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbigiQU5EU0VHLk9VVCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KCiAgICBjaW4gPj4gbiA+PiBrID4+IHE7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBxOyBpKyspCiAgICB7CiAgICAgICAgaW50IGwsIHIsIHg7CiAgICAgICAgY2luID4+IGwgPj4gciA+PiB4OwogICAgICAgIHF1ZXJpZXNbaV0gPSBRdWVyeShsLCByLCB4KTsKICAgIH0KICAgIGZvciAoaW50IGkgPSBrIC0gMTsgaSA+PSAwOyBpLS0pCiAgICAgICAgKGFucyAqPSBjbnRfd2F5cyhpKSkgJT0gTU9EOwogICAgY291dCA8PCAoYW5zICsgTU9EKSAlIE1PRDsKfQo=