#include <bits/stdc++.h>
#define ll long long
#define MAXN 10010
using namespace std;
struct node
{
int i, l, r;
ll val, miao, add;
bool HaveGrown;
}tree[MAXN * 4];
int l, n, ans1;
int ls(int i){return i<<1;}
int rs(int i){return i<<1|1;}
int read_()
{
int s = 0, w = 1;
char ch = getchar();
while(ch < '0' || ch > '9')
{
if(ch == '-')
w = -1;
ch = getchar();
}
while(ch >= '0' && ch <= '9')
{
s = s * 10 + ch - '0';
ch = getchar();
}
return s * w;
}
void build(int i, int l, int r)
{
tree[i].l = l; tree[i].r = r;
if(l == r)
{
tree[i].val = 1;
tree[i].miao = 0;
return ;
}
int mid= (l + r)/2;
build(ls(i), l, mid);
build(rs(i), mid + 1, r);
tree[i].val = tree[ls(i)].val + tree[rs(i)].val;
};
void change(int i, int l, int r, int op)
{
if(tree[i].l==tree[i].r)
{
if(!op)
{
if(tree[i].miao)
++ans1;
tree[i].miao = 0;
tree[i].val = 0;
}
if(op)
{
if(!tree[i].val)
tree[i].miao = 1;
tree[i].val = 1;
}
return ;
}
int mid= (l + r)>>1;
if(l <= mid)
change(ls(i), l, r, op);
if(mid + 1 <= r)
change(rs(i), l, r, op);
tree[i].val = tree[ls(i)].val + tree[rs(i)].val;
tree[i].miao = tree[ls(i)].miao + tree[rs(i)].miao;
}
int main()
{
l = read_(); n = read_();
build(1, 0, l);
for(int i = 1; i <= n; i++)
{
int x, y, z; x = read_(); y = read_(); z = read_();
change(1, y, z, x);
}
cout << tree[1].miao << endl << ans1 ;
return 0;
}