#include<stdio.h>
#include<algorithm>
using namespace std;
const int N=100005;
const long long mod=998244353;
int x[N],n,m;
struct node{
int l,r,h;
}a[N];
long long num[N];
int st;
inline int read(){
int a=0,op=1;char c=getchar();
while((c<'0' || c>'9') && c!='-')c=getchar();
if(c=='-')op=-1,c=getchar();
while(c>='0' && c<='9')a=(a<<1)+(a<<3)+c-'0',c=getchar();
return a*op;
}
bool cmp(const node a,const node b){
return a.h>b.h;
}
inline void work(int x,int h,long long val){
for(int i=st;i<=m;i++){
if(a[i].l<=x && a[i].r>=x && h>a[i].h){
num[i]=(num[i]+val)%mod;
return ;
}
}
return ;
}
int main(){
n=read(),m=read();
for(int i=1;i<=m;i++)a[i].l=read(),a[i].r=read(),a[i].h=read();
a[m+1].l=1;
a[m+1].r=1e6;
a[m+1].h=0;
m++;
sort(a+1,a+m+1,cmp);
st=1;
for(int i=1;i<=n;i++){
work(read(),1e9,1);
}
for(int i=1;i<m;i++){
while(a[st].h>a[i].h && st<i)st++;
work(a[i].l,a[i].h,num[i]);
work(a[i].r,a[i].h,num[i]);
}
printf("%lld\n",num[m]);
return 0;
}
RT,明明是N²啊。。。