#include using namespace std; constexpr int mod = 1000000007; long long modpow(long long a,long long b) { long long ans = 1; while(b) { if(b & 1) { (ans *= a) %= mod; } (a *= a) %= mod; b /= 2; } return ans; } long long fac[400005], finv[400005], inv[400005]; void COMinit() { fac[0] = fac[1] = finv[0] = finv[1] = inv[1] = 1; for (int i = 2; i < 400005; i++){ fac[i] = fac[i - 1] * i % mod; inv[i] = mod - inv[mod % i] * (mod / i) % mod; finv[i] = finv[i - 1] * inv[i] % mod; } } long long COM(int n, int k){ if (n < k) return 0; if (n < 0 || k < 0) return 0; return fac[n] * (finv[k] * finv[n - k] % mod) % mod; } int main() { int N,M; cin >> N >> M; long long ans = 0; COMinit(); ans += COM(N+N,N)*(2*N)%mod; for(int i = 0; i < M; i++) { int t,x,y; cin >> t >> x >> y; if(t == 1) { ans += mod-COM(x+y,x)*COM(N-x-1+N-y,N-x-1)%mod; ans %= mod; } else { ans += mod-COM(x+y,x)*COM(N-x+N-y-1,N-y-1)%mod; ans %= mod; } } cout << ans << endl; }