#include<bits/stdc++.h>
#define H 30
using namespace std;

string s[H][2], S[H][2], t[3][2][2], T[3][2][2];
int h, n, ans, f, cnt=1;

void change(int x, int dy, int dx){
  
  string tmp[2][2];
  
  for(int i=0;i<2;i++)
    for(int j=0;j<2;j++) tmp[i][j]="..";
  
  for(int i=0;i<2;i++)
    for(int j=0;j<2;j++){
      for(int k=0;k<2;k++){
	
	if(t[x][i][j][k]=='.') continue;
	
	int nj=dy+j, nk=dx+k;
	
	if(nj<0||nk<0||2<=nj||2<=nk){
	  f=1;
	  return;
	}
	
	tmp[i][nj][nk]='#';
	
      }
    }
  
  for(int i=0;i<2;i++)
    for(int j=0;j<2;j++) t[x][i][j]=tmp[i][j];

}

int del(){

  int res=0;
  
  for(int i=0;i<H-1;i++){
    
    int flag=0;
    
    for(int j=0;j<2;j++)
      for(int k=0;k<2;k++)
	if(s[i][j][k]=='.') flag=1;
    
    if(!flag){
      
      for(int j=i;j<H-1;j++)
	
	for(int k=0;k<2;k++)
	  for(int l=0;l<2;l++) s[j][k][l]=s[j+1][k][l];
      
      i--;
      res++;
    }
    
  }

  return res;
}

int sim(){
  
  int res=0;
  
  for(int num=0;num<n;num++){

    int F=0, idx=0;
    
    for(int i=H-2;i>=0;i--){
      
      for(int j=0;j<2;j++){
	
	for(int k=0;k<2;k++){
	  
	  for(int l=0;l<2;l++){
	    
	    if(s[i+j][k][l]=='#'&&s[i+j][k][l]==t[num][j][k][l]){
	      F=1;
	      idx=i+1;
	      break;
	    }	    
	    
	  }
	  
	  if(F) break;
	  
	}

	if(F) break;
	
      }
      
      if(F) break;
    }
    
    for(int j=0;j<2;j++)
      
      for(int k=0;k<2;k++)
	
	for(int l=0;l<2;l++)
	  if(t[num][j][k][l]=='#')
	    s[idx+j][k][l]=t[num][j][k][l];
    
    res+=del();
    
  }
  
  for(int i=0;i<H;i++)
    for(int j=0;j<2;j++)
      for(int k=0;k<2;k++)
	s[i][j][k]=S[i][j][k];
  
  return res;
}

void dfs(int x){
  
  if(x==n){
    
    ans=max(ans,sim());
    
    return;
  }
  
  for(int i=-1;i<=1;i++)
    for(int j=-1;j<=1;j++){
      
      for(int k=0;k<2;k++)
	for(int l=0;l<2;l++)
	  t[x][k][l]=T[x][k][l];
      
      f=0;
      change(x,i,j);
      if(f) continue;
      dfs(x+1);
    }
}

void solve(){
  
  ans=0;
  
  dfs(0);
  
  cout<<ans<<endl;

}

int main(){
  
  while(1){
    
    cin>>h>>n;
    if(!h&&!n) break;
    
    for(int i=0;i<H;i++)
      for(int j=0;j<2;j++) s[i][j]=S[i][j]="..";
    
    for(int i=0;i<h;i++)
      for(int j=0;j<2;j++){
	cin>>s[i][j];
	S[i][j]=s[i][j];
      }
    
    for(int i=0;i<n;i++)
      for(int j=0;j<2;j++)
	for(int k=0;k<2;k++) cin>>t[i][j][k];
    
    for(int i=0;i<n;i++){
      if(t[i][0][0]==".."&&t[i][0][1]==".."){
	swap(t[i][0][0],t[i][1][0]);
	swap(t[i][0][1],t[i][1][1]);
      }
    }
    
    for(int i=0;i<n;i++)
      for(int j=0;j<2;j++)
	for(int k=0;k<2;k++) T[i][j][k]=t[i][j][k];
    
    solve();
    
  }
  
  return 0;
}