#include<bits/stdc++.h>
using namespace std;
#define int long long
#define debug() puts("I WILL AK")
#define N 1007
#define M 200007
int mp[N][N],vis[N][N];
int dx[]={0,0,1,-1},dy[]={1,-1,0,0};
struct cng{
int x,y;
char op;
}p[M];
int ans[M],ans0;
int n,m;
inline int get(int x,int y){
return (x-1)*n+y;
}
struct node{
int x,y;
};
vector<node> g[N];
node que[N*N];
int ll=1,rr=0;
inline void add(int x,int y){
if(mp[x][y]=='U'){
if(x==1) vis[x][y]=1,que[++rr]={x,y};
}
else if(mp[x][y]=='D'){
if(x==n) vis[x][y]=1,que[++rr]={x,y};
}
else if(mp[x][y]=='L'){
if(y==1) vis[x][y]=1,que[++rr]={x,y};
}
else if(mp[x][y]=='R'){
if(y==n) vis[x][y]=1,que[++rr]={x,y};
}
else if(mp[x][y]=='?'){
if(y==1||y==n||x==1||x==n) que[++rr]={x,y},vis[x][y]=1;
}
}
void bfs(){
while(ll<=rr){
auto u=que[ll++];
ans0++;
int x=u.x,y=u.y;
vis[x][y]=1;
for(int i=0;i<4;++i){
int xx=x+dx[i],yy=y+dy[i];
if(dx[i]==0&&dy[i]==1&&!vis[xx][yy]&&xx>=1&&xx<=n&&yy>=1&&yy<=n&&(mp[xx][yy]=='L'||mp[xx][yy]=='?')){
que[++rr]={xx,yy};
vis[xx][yy]=1;
}
else if(dx[i]==0&&dy[i]==-1&&!vis[xx][yy]&&xx>=1&&xx<=n&&yy>=1&&yy<=n&&(mp[xx][yy]=='R'||mp[xx][yy]=='?')){
que[++rr]={xx,yy};
vis[xx][yy]=1;
}
else if(dx[i]==-1&&dy[i]==0&&!vis[xx][yy]&&xx>=1&&xx<=n&&yy>=1&&yy<=n&&(mp[xx][yy]=='D'||mp[xx][yy]=='?')){
que[++rr]={xx,yy};
vis[xx][yy]=1;
}
else if(dx[i]==1&&dy[i]==0&&!vis[xx][yy]&&xx>=1&&xx<=n&&yy>=1&&yy<=n&&(mp[xx][yy]=='U'||mp[xx][yy]=='?')){
que[++rr]={xx,yy};
vis[xx][yy]=1;
}
}
}
}
signed main(){
cin>>n>>m;
for(int i=1;i<=m;++i){
cin>>p[i].x>>p[i].y>>p[i].op;
mp[p[i].x][p[i].y]=p[i].op;
}
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
if(!mp[i][j]) mp[i][j]='?';
add(i,j);
}
}
bfs();
ans[m]=n*n-ans0;
for(int i=m;i>=1;--i){
ll=1,rr=0;
mp[p[i].x][p[i].y]='?';
if(!vis[p[i].x][p[i].y]) que[++rr]={p[i].x,p[i].y};
bfs();
ans[i-1]=n*n-ans0;
}
for(int i=1;i<=m;++i){
cout<<ans[i]<<'\n';
}
return 0;
}