output_description: Print the number of ways to paint the squares to satisfy all the conditions,
  modulo 10^9+7.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N M
      l_1 r_1 x_1
      l_2 r_2 x_2
      :
      l_M r_M x_M
attempt: #include <bits/stdc++.h>
  #define REP(i,a,b) for(int i=(a);i<(b);i++)
  #define RREP(i,a,b) for(int i=(a);i>=(b);i--)
  #define pq priority_queue
  #define P pair<int,int>
  #define P2 pair<int,P>
  #define P3 pair<int,P2>
  typedef long long ll; typedef long double ld;
  using namespace std;
  const int INF=1e9, MOD=1e9+7, around[]={0,1,1,-1,-1,0,-1,1,0,0};
  const ll LINF=1e18;
  const ld PI=abs(acos(-1));
  int n,m,a,b,c;
  ll dp[310][310][310]; //最右のindex
  vector<P> vec[310];
  
  bool ch(int i,int j,int k){
  	int r=max(i,max(j,k));
  	for(auto s:vec[r]){
  		if(((s.first<i)+(s.first<j)+(s.first<k))!=s.second) return 0;
  	}
  	
  	return 1;
  }
  
  int main(){
  	cin >> n >> m;
  	REP(i,0,m) cin >> a >> b >> c,vec[b].push_back(P(a-1,c));
  	
  	dp[0][0][0]=1;
  	REP(i,0,n){
  		REP(j,0,n){
  			REP(k,0,n){
  				int ma=max(i,max(j,k));
  				if(ch(i,j,ma+1)) (dp[i][j][ma+1]+=dp[i][j][k])%=MOD;
  				if(ch(i,ma+1,k)) (dp[i][ma+1][k]+=dp[i][j][k])%=MOD;
  				if(ch(ma+1,j,k)) (dp[ma+1][j][k]+=dp[i][j][k])%=MOD;
  			}
  		}
  	}
  	
  	ll s=0;
  	REP(i,0,n+1){
  		REP(j,0,n+1){
  			s+=dp[n][i][j];
  			s+=dp[i][n][j];
  			s+=dp[i][j][n];
  		}
  	}
  	cout << s%MOD << endl;
  	return 0;
  }
  
problem_description: Statement
  
  There are N squares arranged in a row. The squares are numbered 1, 2, ..., N,
  from left to right.
  
  Snuke is painting each square in red, green or blue. According to his
  aesthetic sense, the following M conditions must all be satisfied. The i-th
  condition is:
  
    * There are exactly x_i different colors among squares l_i, l_i + 1, ..., r_i.
  
  In how many ways can the squares be painted to satisfy all the conditions?
  Find the count modulo 10^9+7.
samples: [{"input": "3 1\n    1 3 3", "output": "6\n    \n\nThe six ways are:\n\n  * RGB\n  * RBG\n  * GRB\n  * GBR\n  * BRG\n  * BGR\n\nwhere R, G and B correspond to red, green and blue squares, respectively.\n\n* * *"}, {"input": "4 2\n    1 3 1\n    2 4 2", "output": "6\n    \n\nThe six ways are:\n\n  * RRRG\n  * RRRB\n  * GGGR\n  * GGGB\n  * BBBR\n  * BBBG\n\n* * *"}, {"input": "1 3\n    1 1 1\n    1 1 2\n    1 1 3", "output": "0\n    \n\nThere are zero ways.\n\n* * *"}, {"input": "8 10\n    2 6 2\n    5 5 1\n    3 5 2\n    4 7 3\n    4 4 1\n    2 3 1\n    7 7 1\n    1 5 2\n    1 7 3\n    3 4 2", "output": "108"}]