/*
  AOJ 1291
  Title:Search of Concatenated Strings
  @kankichi573
*/
#include <stdio.h>
#include <string.h>

int n,m;
char e[12][21];
int  len[12];
int  len_total;
char t[5001];
int solve(char *s,int use,int cnt)
{
  int i,mask;

  //  printf("s=%s [%d][%d]\n",s,use,cnt);

  if(cnt==0)
    return(1);
  for(i=0,mask=1;i<n;i++,mask<<=1)
    {
      if(mask & use)
	continue;
      if(0==strncmp(s,&e[i][0],len[i]))
	return(solve(s+len[i],use|mask,cnt-1));
    }
  return(0);
}

main()
{
  int i,cnt;
  char buf[101];
  while(scanf("%d %d",&n,&m) && (n||m))
    {
      for(i=0;i<n;i++)
	{
	  scanf("%s",&e[i][0]); 
	  len[i]=strlen(&e[i][0]);
	}
      t[0]='\0';
      for(i=0;i<m;i++)
	{
	  scanf("%s",buf); 
	  if(buf[strlen(buf)-1]<' ')
	    buf[strlen(buf)-1]='\0';
	  strcat(t,buf);
	}
      for(i=0,cnt=0;i<strlen(t)-len_total;i++)
	{
	  if(solve(t+i,0,n))
	    cnt++;
	}
      printf("%d\n",cnt);
    }
  return(0);
}