#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
#define N 130
int dx[]={0,-1,0,1};
int dy[]={1,0,-1,0};
int n,m,ans;
int map[N][N];
int vis[N][N];
int judge(int x,int y){
if(x<1||y<1||x>n||y>n)
return 1;
return 0;
}
void dfs(int x,int y,int step,int dir){
if(vis[x][y]) return ;
vis[x][y]=1;//标记已走过
if(step>ans) ans=step;
int tx,ty,td;
tx=x+dx[dir];ty=y+dy[dir];
if(map[tx][ty]||judge(tx,ty)){//沿原方向不能再走时
td=(dir+3)%4;//右转
tx=x+dx[td];ty=y+dy[td];
if(!map[tx][ty]&&!judge(tx,ty)) dfs(tx,ty,step+1,td);
td=(dir+5)%4;//左转
tx=x+dx[td];ty=y+dy[td];
if(!map[tx][ty]&&!judge(tx,ty)) dfs(tx,ty,step+1,td);
}
else dfs(tx,ty,step+1,dir);//沿原方向继续走
vis[x][y]=0;//还原回溯
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
char c;int x;
cin>>c>>x;
map[c-‘A‘+1][x]=1;
}
dfs(1,1,0,0);//向右走
memset(vis,0,sizeof(vis));
dfs(1,1,0,3);//向左走
cout<<ans+1<<endl;
return 0;
}