#include<bits/stdc++.h>
using namespace std;
int n,m,tc;
struct tree{
int twig,hole,laz1,laz2;
}t[100100];
void pushUp(int k)
{
t[k].twig=t[2*k].twig+t[2*k+1].twig;
t[k].hole=t[2*k].hole+t[2*k+1].hole;
return;
}
void pushDown(int k,int l,int r,int mid)
{
if(t[k].laz1==0&&t[k].laz2==0)return;
t[2*k].laz1=t[k].laz1;
t[2*k].laz2=t[k].laz2;
t[2*k+1].laz1=t[k].laz1;
t[2*k+1].laz2=t[k].laz2;
if(t[k].laz1==1&&t[k].laz2==0){
t[2*k].twig=0;
t[2*k+1].twig=0;
t[2*k].hole=mid-l+1;
t[2*k+1].hole=r-mid;
}
if(t[k].laz1==0&&t[k].laz2==1){
t[2*k].twig+=t[2*k].hole;
t[2*k+1].twig+=t[2*k+1].hole;
t[2*k].hole=0;
t[2*k+1].hole=0;
}
if(t[k].laz1==1&&t[k].laz2==1){
t[2*k].twig=mid-l+1;
t[2*k+1].twig=r-mid;
t[2*k].hole=0;
t[2*k+1].hole=0;
}
t[k].laz1=0;
t[k].laz2=0;
return;
}
void cut(int l,int r,int x,int y,int k)
{
if(l>=x&&r<=y){
tc+=t[k].twig;
t[k].twig=0;
t[k].hole=r-l+1;
t[k].laz1=1;
t[k].laz2=0;
return;
}
int mid=(l+r)/2;
pushDown(k,l,r,mid);
if(mid>=x)cut(l,mid,x,y,2*k);
if(mid<y)cut(mid+1,r,x,y,2*k+1);
pushUp(k);
return;
}
void plant(int l,int r,int x,int y,int k)
{
if(l>=x&&r<=y){
t[k].twig+=t[k].hole;
t[k].hole=0;
t[k].laz2=1;
return;
}
int mid=(l+r)/2;
pushDown(k,l,r,mid);
if(mid>=x)plant(l,mid,x,y,2*k);
if(mid<y)plant(mid+1,r,x,y,2*k+1);
pushUp(k);
return;
}
int main()
{
scanf("%d%d",&n,&m);
n++;
for(int i=1;i<=m;i++)
{
int opt,x,y;
scanf("%d%d%d",&opt,&x,&y);
x++;
y++;
if(opt==0)cut(1,n,x,y,1);
else plant(1,n,x,y,1);
}
printf("%d\n%d",t[1].twig,tc);
return 0;
}