#include<iostream>
#include<cstdio>
#include<map>
#include<algorithm>
using namespace std;
int n,m;
int fa[200001];
int s[200001],t[200001];
bool jo[200001];
int sum[200001],tot;
//map<int,int > ma;
int find(int x){
// if(x>20000||x<1) exit(0);
if(fa[x]==x) return x;
return fa[x]=find(fa[x]);
}
int unionn(int x,int y){
//if(x>tot*2||y>tot*2) exit(0);
int fx=find(x);
int fy=find(y);
// if(fx>20000||fx<1||fy>20000||fy<1||x>20000||x<1||y>20000||y<1) exit(0);
if(fx!=fy) fa[fx]=fy;
}
int main(){
//// freopen("a.in","r",stdin);
// freopen("a.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i){
int a,b;
string st;
// scanf("%d%d",&a,&b);//sj-s(i-1)
cin>>a>>b>>st;
a--;//sj-s(i-1)
s[i]=a;
t[i]=b;
jo[i]=((st[0]=='o')?1:0);
// if(ma.find(a)==ma.end()) sum[++tot]=a,ma[a]=tot;
// if(ma.find(b)==ma.end()) sum[++tot]=b,ma[b]=tot;
// cout<<tot<<endl;
sum[++tot]=a;
sum[++tot]=b;
}
for(int i=1;i<=tot*2;++i) fa[i]=i;//
sort(sum+1,sum+1+tot);
tot=unique(sum+1,sum+tot+1)-sum-1;
// cout<<tot<<endl;
/*for(int i=1;i<=tot;++i){
ma[sum[i]]=i;
}*/
for(int i=1;i<=tot*2;++i) fa[i]=i;//
for(int i=1;i<=m;++i){
/* s[i]=ma[s[i]];
t[i]=ma[t[i]];*/
s[i]=lower_bound(sum+1,sum+tot+1,s[i])-sum;//离散化
t[i]=lower_bound(sum+1,sum+tot+1,t[i])-sum;//离散化
int fs=find(s[i]);
int ft=find(t[i]);
if(jo[i]==1){
if(fs==ft){
printf("%d\n",i-1);
return 0;
}
else {
unionn(s[i],t[i]+tot),unionn(s[i]+tot,t[i]);
}
}
else {
if(fs==find(t[i]+tot)){
printf("%d\n",i-1);
return 0;
}
else {
unionn(s[i],t[i]);
unionn(s[i]+tot,t[i]+tot);
}
}
}
printf("%d\n",m);
return 0;
}