#define SEC

#ifdef THR
#include <cstdio>

//GSHS CPS #3

#define SIZE 1<<18
struct ELEMENT{ int v, p; } T[SIZE];
int b, n, m;
void paint(int s, int e, int k, int o)
{
    while( s < e )
    {
        if( s%2==1 ) T[s].v = k, T[s++].p = o;
        if( e%2==0 ) T[e].v = k, T[e--].p = o;
        s>>=1, e>>=1;
    }
    if( s == e ) T[s].v = k, T[s].p = o;
}
int find(int v)
{
    int max = 0, ans = 0;
    while(v)
    {
        if( max < T[v].p ) max = T[v].p, ans = T[v].v;
        v>>=1;
    }
    return ans;
}
int main()
{
    int i;
    freopen(".10.in","r",stdin);
    freopen(".10.out","w", stdout);
    scanf("%d%d", &n, &m);
    for( b = 1 ; b < n ; b<<=1 );
    for( i = 0 ; i < m ; i++ )
    {
        int s, e, k;
        scanf("%d%d%d", &s, &e, &k);
        paint(s+b,e+b,k,i+1);
    }
    for( i = 0 ; i < n ; i++ )
        printf("%d ", find(i+b+1));
}



#endif

#ifdef FIR
#include <cstdio>
#include <algorithm>
using namespace std;
int S[101], n;
// GSHS CPS #1
int main()
{
    int i, j, k, g = 0;
    scanf("%d", &n);
    for( i = 0 ; i < n ; i++ )
        scanf("%d", &S[i]);
    for( i = 0 ; i < n-2 ; i++ )
        for( j = i+1 ; j < n-1 ; j++ )
            for( k = j+1 ; k < n ; k++ )
                g = max( g, __gcd( S[i], __gcd( S[j], S[k])));
    printf("%d", g);
}
#endif


#ifdef SEC
#include <stdio.h>
#define MOD 1000000007

// GSHS_CPS #4

int B[12][12],n,DT[12][12][1<<20];
int get(int a, int b)
{
    int i, h;
    for( i = 0, h = 0 ; i < n ; i++ )
        h<<=2, h+=B[a+(b+i)/n][(b+i)%n];
    return h;
}
void prt()
{
    int i, j;
    for( i = 0 ; i < n ; i++, puts("")) for( j = 0 ; j < n ; j++ )
        printf("%d ", B[i][j]);
    puts("=======");
    //scanf("%d", &i);
}
int f(int a, int b, int h)
{
    if( a == n ) return 1;
    if( !DT[a][b][h] )
    {
        int t;
        if( B[a][b] )
        {
            for( int i = 0 ; i <= 3 ; i++ ) for( int j = 0 ; j <= 3 ; j++ )
            {
                if( B[a][b] >= i+j && B[a+1][b] >= i && B[a][b+1] >= j )
                {
                    B[a+1][b]-=i;
                    B[a][b+1]-=j;
                    t = B[a][b];
                    B[a][b] = 0;
                    DT[a][b][h] += f(a+(b+1)/n, (b+1)%n, get(a+(b+1)/n,(b+1)%n));
                    DT[a][b][h]%=MOD;
                    B[a][b] = t;
                    B[a+1][b]+=i;
                    B[a][b+1]+=j;
                }
            }
        }
        else
        {
            DT[a][b][h] += f(a+(b+1)/n, (b+1)%n, get(a+(b+1)/n,(b+1)%n));
            DT[a][b][h] %= MOD;
        }
    }
    return DT[a][b][h];
}
int main()
{
    int i, j;
    freopen(".25.in","r",stdin);
    freopen(".25.out","w",stdout);
    scanf("%d", &n);
    for( i = 0 ; i < n ; i++ ) for( j = 0 ; j < n ; j++ )
        scanf("%d", &B[i][j]);
    printf("%d\n", f(0,0,get(0,0)));
}
#endif

#ifdef CCC2

#include <cstdio>
#include <map>
using namespace std;
char S[100];
map<char, int> M;
int main()
{
    int i, ans = 0;
    scanf("%s", S);
    M['I']=1, M['V']=5, M['X']=10, M['L']=50, M['C']=100, M['D']=500, M['M']=1000, M[0]=0;
    for( i = 1 ; S[i] ; i+=2 )
    {
        if( M[S[i]] >= M[S[i+2]] ) ans += (S[i-1]-'0')*M[S[i]];
        else ans -= (S[i-1]-'0')*M[S[i]];
    }
    printf("%d", ans);
}
#endif

#ifdef CCC3

#include <cstdio>
int R[1010];
int abs(int a) { return a>0 ? a:-a; }
int max(int a, int b) { return a>b? a:b; }
int main()
{
    int i, n, t, m, m2, s, e, ans = 0;
    scanf("%d", &n);
    for( i = 0 ; i < n ; i++ )
        scanf("%d", &t), R[t]++;
    for( i = m = 0 ; i <= 1000 ; i++ )
        if( R[i] > m ) m = R[i];
    for( i = s = e = 0 ; i <= 1000 ; i++ )
    {
        if( !s && R[i] == m ) s = i;
        if( R[i] == m ) e = i;
    }
    if( e-s == 0 )
    {
        for( i = m2 = 0 ; i <= 1000 ; i++ )
            if( R[i] != m && R[i] > m2 ) m2 = R[i];
        for( i = 0 ; i <= 1000 ; i++ )
            if( R[i] == m2 )
                ans = max( ans, abs(s-i));
        printf("%d", ans);
    }
    else printf("%d", e-s);
}

#endif

#ifdef CCC4

#include <cstdio>
#include <map>
#include <string>
#include <queue>
using namespace std;

int main()
{
    while(1)
    {
        int n, i, s[10] = {};
        scanf("%d", &n);
        if( n < 3 ) puts("IMPOSSIBLE");
        for( i = 0 ; i < n ; i++ )
            scanf("%d", &s[i]);
        for( ; i < 8 ; i++ ) s[i] = -1;
        printf("pause");
    }
}
#endif

#ifdef CCC5
// DP
#include <cstdio>
int m[30][30], r, c, k;
int main()
{
    int i,j,a,b;
    scanf("%d%d%d", &r, &c, &k);
    for( i = 0 ; i < k ; i++ )
    {
        scanf("%d%d",&a,&b);
        m[a][b] = -1;
    }
    m[0][1] = 1;
    for( i = 1 ; i <= r ; i++ ) for( j = 1 ; j <= c ; j++ )
        if( m[i][j] != -1 )
            m[i][j] = (m[i][j-1]==-1?0:m[i][j-1]) + (m[i-1][j]==-1?0:m[i-1][j]);
    printf("%d\n", m[r][c]);
}

#endif

#ifdef CCC5_2
// DB
#include <cstdio>
int m[30][30], DT[30][30], r, c, k;
int f(int a, int b)
{
    int ways = 0;
    if( a > r || b > c ) return 0;
    if( a == r && b == c ) return 1;
    if( m[a][b+1] != -1 ) ways += f(a, b+1);
    if( m[a+1][b] != -1 ) ways += f(a+1, b);
    return ways;
}
int main()
{
    int i,a,b;
    scanf("%d%d%d",&r,&c,&k);
    for( i = 0 ; i < k ; i++ )
    {
        scanf("%d%d", &a,&b);
        m[a][b] = -1;
    }
    printf("%d", f(1,1));
}
#endif
