#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n,m,tot;
string s;
struct node{
int l,r,ans;
}que[10005];
int a[10005],fa[10005],d[10005];
int get(int x) {
if(fa[x]==x) return x;
int root=get(fa[x]);
d[x]^=d[fa[x]];
return fa[x]=root;
}
int main() {
cin>>n>>m;
for(int i=1;i<=m;i++) {
cin>>que[i].l>>que[i].r>>s;
if(s=="odd") que[i].ans=1;
else que[i].ans=0;
a[++tot]=que[i].l-1;
a[++tot]=que[i].r;
}
sort(a+1,a+tot+1);
n=unique(a+1,a+tot+1)-a-1;
for(int i=1;i<=2*m;i++) fa[i]=i;
for(int i=1;i<=m;i++) {
int x=lower_bound(a+1,a+n+1,que[i].l-1)-a;
int y=lower_bound(a+1,a+n+1,que[i].r)-a;
int fx=get(x),fy=get(y);
if(fx==fy)
if((d[x]^d[y])!=que[i].ans) {
cout<<i-1<<endl;
return 0;
}
else
fa[fx]=fy,d[fx]=d[x]^d[y]^que[i].ans;
}
cout<<m<<endl;
return 0;
}