#include <bits/stdc++.h>
using namespace std;
const int maxn=2e6+5;
typedef long long ll;
ll a[maxn],p,sum[maxn<<2],add[maxn<<2],mul[maxn<<2];
ll n,l,ans1,ans2;
void pushup(int rt){
if(sum[rt<<1]==sum[rt<<1|1]) sum[rt]=sum[rt<<1];
else sum[rt]=-1;
}
void build(int l,int r,int rt){
sum[rt]=1;
if(l==r) return;
int m=(l+r)>>1;
build(l,m,rt<<1);
build(m+1,r,rt<<1|1);
}
void pushdown(int rt){
if(sum[rt]!=1&&sum[rt]!=-1){
sum[rt<<1]=sum[rt<<1|1]=sum[rt];
}
}
void update_cut(int L,int R,int l,int r,int rt){
pushdown(rt);
int m=(l+r)>>1;
if(L<=l&&r<=R){
if(sum[rt]==0) return;
else if(sum[rt]==1) {
sum[rt]=0;
return;
}
else if(sum[rt]==2){
ans1+=r-l+1;
ans2=ans2-(r-l+1);
sum[rt]=0;
return;
}
else{
sum[rt]=0;
if(L<= m) update_cut(L,R,l,m,rt<<1);
if(R>m) update_cut(L,R,m+1,r,rt<<1|1);
return;
}
}
if(L<= m) update_cut(L,R,l,m,rt<<1);
if(R>m) update_cut(L,R,m+1,r,rt<<1|1);
pushup(rt);
}
void update_plant(int L,int R,int l,int r,int rt){
pushdown(rt);
int m=(l+r)>>1;
if(L<=l&&r<=R){
if(sum[rt]==0){
sum[rt]=2;
ans2+=r-l+1;
return;
}
else if(sum[rt]==1){
return;
}
else if(sum[rt]==2){
return;
}
else{
if(L<=m) update_plant(L,R,l,m,rt<<1);
if(R>m) update_plant(L,R,m+1,r,rt<<1|1);
return;
}
}
if(L<=m) update_plant(L,R,l,m,rt<<1);
if(R>m) update_plant(L,R,m+1,r,rt<<1|1);
pushup(rt);
}
int main()
{
cin>>l>>n;
build(1,l,1);
while (n--){
int op,x,y;
cin>>op>>x>>y;
if(op==1){
update_plant(x,y,1,l,1);
}
else {
update_cut(x,y,1,l,1);
}
}
cout<<ans2<<'\n'<<ans1<<'\n';
return 0;
}