#include<cstdio>

const int mod=1e9+7;

#define add(a,b) (a+=b)>=mod&&(a-=mod)

int dp[302][301][301],first[301];

struct query{ int l,x,nx; }q[301];

int main()
{
	int i,j,k,l,m,n,ans=0;
	scanf("%d%d",&n,&m);
	for(i=1;i<=m;i++)
		scanf("%d%d%d",&q[i].l,&j,&q[i].x),
			q[i].nx=first[j],first[j]=i;
	dp[0][0][0]=1;
	for(i=0;i<=n;i++)
		for(j=0;j<i||!j;j++)
			for(k=0;k<j||!k;k++)
				if(dp[i][j][k])
				{
					for(l=first[i];l;l=q[l].nx)
						switch(q[l].x){
						case 1:if(j>=q[l].l)goto loop;break;
						case 2:if(k>=q[l].l||j<q[l].l)goto loop;break;
						case 3:if(k<q[l].l)goto loop;break;
						}
					if(i==n)add(ans,dp[i][j][k]);
					else
					{
						add(dp[i+1][j][k],dp[i][j][k]);
						add(dp[i+1][i][k],dp[i][j][k]);
						add(dp[i+1][i][j],dp[i][j][k]);
					}
				loop:;
				}
	printf("%d\n",ans);
}