#include<bits/stdc++.h>
using namespace std;
struct node
{
int x,y,op;
}a[114514];
int n,m,f[114514],b[114514],cnt,sum;
int find(int x)
{
if(f[x]==x)
return x;
return f[x]=find(f[x]);
}
int main()
{
cin>>n>>m;
for(int i=1;i<=1e5;i++)
f[i]=i;
for(int i=1;i<=m;i++)
{
string s;
cin>>a[i].x>>a[i].y>>s;
if(s[0]=='o')
a[i].op=0;
else
a[i].op=1;
b[++cnt]=a[i].x,b[++cnt]=a[i].y;
}
sort(1+b,1+b+cnt);
sum=unique(b+1,b+1+cnt)-(b+1);
for(int i=1;i<=m;i++)
{
a[i].x=lower_bound(b+1,b+1+sum,a[i].x-1)-b;
a[i].y=lower_bound(b+1,b+1+sum,a[i].y)-b;
}
for(int i=1;i<=m;i++)
{
if(a[i].op==0)
{
if(find(a[i].x)==find(a[i].y+sum)||find(a[i].x+sum)==find(a[i].y))
{
cout<<i-1;
return 0;
}
else
{
f[find(a[i].x)]=find(a[i].y);
f[find(a[i].x+sum)]=find(a[i].y+sum);
}
}
else
{
if(find(a[i].x)==find(a[i].y)||find(a[i].x+sum)==find(a[i].y+sum))
{
cout<<i-1;
return 0;
}
else
{
f[find(a[i].x)]=find(a[i].y+sum);
f[find(a[i].x+sum)]=find(a[i].y);
}
}
}
cout<<m;
}