#include <stdio.h>
#include <string.h>
#include <unistd.h>
//建立结构体存放r,re,red的值
typedef struct{
long long r,e,d,re,ed,red;
} Node;
//定义全局变量存放树
Node tree_s[800020],tree_t[800020];
char s[200005],t[200005];
//建树
void build(Node tree[],int node,int L,int R,char *s){
if (L==R) {
memset(&tree[node], 0, sizeof(Node));
if (s[L-1]=='r') {
tree[node].r=1;
}
else if (s[L-1]=='e') {
tree[node].e=1;
}
else if (s[L-1]=='d') {
tree[node].d=1;
}
return;
}
int mid=(L+R)/2;
build(tree, node*2, L, mid, s);
build(tree, node*2+1, mid+1, R, s);
//合并左右子树的值,r,e,d的值均为左右子树相加;
tree[node].r=tree[node*2].r+tree[node*2+1].r;
tree[node].e=tree[node*2].e+tree[node*2+1].e;
tree[node].d=tree[node*2].d+tree[node*2+1].d;
//re的值为左右子树re的值相加再加上左子树r的数量*右子树e的数量,ed同理
tree[node].re=tree[node*2].re+tree[node*2+1].re+tree[node*2].r*tree[node*2+1].e;
tree[node].ed=tree[node*2].ed+tree[node*2+1].ed+tree[node*2].e*tree[node*2+1].d;
//red的值为左右子树red的值相加,再加上左子树r的数量*右子树ed的数量,再加上左子树re的数量*右子树d的数量
tree[node].red=tree[node*2].red+tree[node*2+1].red+
tree[node*2].r*tree[node*2+1].ed+tree[node*2].re*tree[node*2+1].d;
}
//单点修改
void updata(Node tree[],int node,int L,int R,int p,char c){
if (L==R) {
memset(&tree[node], 0, sizeof(Node));
if (c=='r') {
tree[node].r=1;
}
else if (c=='e') {
tree[node].e=1;
}
else if (c=='d') {
tree[node].d=1;
}
return;
}
int mid=(L+R)/2;
if (p<=mid) {
updata(tree, node*2, L, mid, p, c);
}
else {
updata(tree, node*2+1, mid+1, R, p, c);
}
//合并左右子树的值,r,e,d的值均为左右子树相加;
tree[node].r=tree[node*2].r+tree[node*2+1].r;
tree[node].e=tree[node*2].e+tree[node*2+1].e;
tree[node].d=tree[node*2].d+tree[node*2+1].d;
//re的值为左右子树re的值相加再加上左子树r的数量*右子树e的数量,ed同理
tree[node].re=tree[node*2].re+tree[node*2+1].re+tree[node*2].r*tree[node*2+1].e;
tree[node].ed=tree[node*2].ed+tree[node*2+1].ed+tree[node*2].e*tree[node*2+1].d;
//red的值为左右子树red的值相加,再加上左子树r的数量*右子树ed的数量,再加上左子树re的数量*右子树d的数量
tree[node].red=tree[node*2].red+tree[node*2+1].red+
tree[node*2].r*tree[node*2+1].ed+tree[node*2].re*tree[node*2+1].d;
}
int main() {
int n,q,a;
scanf("%d%d",&n,&q);
scanf("%s",s);
scanf("%s",t);
//建树
build(tree_s,1,1,n,s);
build(tree_t,1,1,n,t);
//多次交换
while (scanf("%d", &a) != EOF) { // 注意 while 处理多个 case
//将字符串更新为交换后的值
char b;
b=s[a-1];
s[a-1]=t[a-1];
t[a-1]=b;
//单点修改并重新统计red的值
updata(tree_s,1,1,n,a,s[a-1]);
updata(tree_t, 1, 1, n, a, t[a-1]);
//直接输出s的red的值-t的red的值
printf("%lld\n",tree_s[1].red-tree_t[1].red);
}
return 0;
}