#include <bits/stdc++.h>
#define MOD 1000000007LL
using namespace std;

typedef long long ll;
typedef pair<int,int> P;

int h,n;
int fie[22][2][2];
int flag[22][2][2];
int blo[6][2][2];
int res,cnt;

bool can_set(int v,int dy,int dx){
	for(int i=v*2;i<=v*2+1;i++){
		for(int j=0;j<2;j++){
			for(int k=0;k<2;k++){
				if(blo[i][j][k]==1){
					if(k+dx<0 || k+dx>=2)return false;
					if(j+dy<0 || j+dy>=2)return false;
				}
			}
		}
	}
	return true;
}

int len(int v,int y,int x){
	for(int i=14;i>=0;i--){
		if(fie[i][y][x]==1)return v-i-1;
	}
	return v;
}

bool check_bomb(int v){
	for(int i=0;i<2;i++){
		for(int j=0;j<2;j++){
			if(fie[v][i][j]==0)return false;
		}
	}
	return true;
}

void bomb(int v){
	for(int i=v;i<16;i++){
		for(int j=0;j<2;j++){
			for(int k=0;k<2;k++){
				fie[i][j][k]=fie[i+1][j][k];
			}
		}
	}
	for(int i=0;i<2;i++){
		for(int j=0;j<2;j++){
			fie[16][i][j]=0;
		}
	}
}

void fall(int v,int dy,int dx){
	for(int i=0;i<2;i++){
		for(int j=0;j<2;j++){
			for(int k=0;k<2;k++){
				if(blo[v*2+i][j][k]==1){
					fie[17+i][j+dy][k+dx]=1;
				}
			}
		}
	}
	int down=20;
	for(int i=17;i<=18;i++){
		for(int j=0;j<2;j++){
			for(int k=0;k<2;k++){
				if(fie[i][j][k]==1){
					down=min(down,len(i,j,k));
				}
			}
		}
	}
	for(int i=17;i<=18;i++){
		for(int j=0;j<2;j++){
			for(int k=0;k<2;k++){
				if(fie[i][j][k]>0)fie[i-down][j][k]=fie[i][j][k];
				fie[i][j][k]=0;
			}
		}
	}
	for(int i=16;i>=0;i--){
		if(check_bomb(i)){
			bomb(i);
			cnt++;
		}
	}
}

void dfs(int v){
	if(v==n){
		res=max(res,cnt);
		return;
	}
	for(int i=-1;i<=1;i++){
		for(int j=-1;j<=1;j++){
			if(can_set(v,i,j)){
				int tmp[22][2][2];
				int tmpc=cnt;
				memcpy(tmp,fie,sizeof(tmp));
				fall(v,i,j);
				dfs(v+1);
				cnt=tmpc;
				memcpy(fie,tmp,sizeof(tmp));
			}
		}
	}
}

int main(void){
	while(1){
		scanf("%d%d",&h,&n);
		if(h==0 && n==0)break;
		memset(fie,0,sizeof(fie));
		for(int i=0;i<h;i++){
			for(int j=0;j<2;j++){
				string str;
				cin >> str;
				for(int k=0;k<2;k++){
					if(str[k]=='#')fie[i][j][k]=1;
				}
			}
		}
		memset(blo,0,sizeof(blo));
		for(int i=0;i<n*2;i++){
			for(int j=0;j<2;j++){
				string str;
				cin >> str;
				for(int k=0;k<2;k++){
					if(str[k]=='#')blo[i][j][k]=1;
				}
			}
		}
		res=0;
		cnt=0;
		dfs(0);
		printf("%d\n",res);
	}
	return 0;
}