#include <bits/stdc++.h>
 
using namespace std;
#define FOR(i,a,b) for(int i=(a);i<(b);i++)
#define REP(i,n) FOR(i,0,n)
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<vvi> vvvi;
typedef vector<vvvi> vvvvi;
 
int INF=1e9;
 
 
vvvvi b(2, vvvi(2, vvi(2, vi(3))));
int n;
int dx[9]={0,-1,-1,0,1,1,1,0,-1}, dy[9]={0,0,-1,-1,-1,0,1,1,1};
int dfs(int m, int del, vvvi c)//テッツセツεッツスツ、テッツセツづッツスツステッツセツづゥツ卍崚ッツスツァテッツセツづゥツ鳴嘉ッツスツェテッツセツεッツスツァテッツセツづ・ツエツ「テッツスツョテッツセツεッツスツ」テッツセツ?テッツスツョテッツセツεッツスツ」テッツセツづ篠エテ・ツァツェテッツスツ」テッツセツづ篠エテッツスツュテッツセツεッツスツ」テッツセツづ篠エテ篠オテッツスツ」テッツセツづ」ツ?、テッツスツッテッツセツεッツスツ」テッツセツ?? テッツセツεッツスツヲテッツセツづッツスツカテッツセツづヲツ堋療ッツスツ」テッツセツ?テ・ツエツ堙ッツスツ」テッツセツ?テヲツキツ古ッツスツヲテッツセツづッツスツョテッツセツづッツスツオテッツセツεッツスツヲテッツセツづゥツ鳴嘉ッツスツー
{
    if(m==n)
        return del;
     
    int tdel,mtdel=0;
    bool enableBlock=true;
    REP(l,9)
    {
        //cout<<m<<"-"<<l<<"テッツセツεッツスツ・テッツセツづ・ツエツ「テヲツヲツイテッツスツァテッツセツづ・ツエツ「テッツスツョ"<<endl;
         
        vvvi tb(2, vvi(2, vi(2)));
        vvvi cb(c);
        tdel=del;
        enableBlock=true;
 
 
        REP(k,2)
        REP(j,2)
        REP(i,2)
        {
            int px=i+dx[l],py=j+dy[l];
            if(0<=px&& px<2 && 0<=py&&py<2)
            {
                tb[px][py][k] = b[i][j][k][m];
                continue;
            }   
            else if(!(b[i][j][k][m]==0))
            {
                //cout<<i<<j<<k<<l<<endl;
                enableBlock=false;
                break;
            }
        }
        if(!enableBlock) continue;
 
        //テッツセツεッツスツィテッツセツづゥツ敖津ッツスツステッツセツεッツスツ」テッツセツ?テッツスツィテッツセツεッツスツ」テッツセツ?テ・ツエツ堙ッツスツ」テッツセツづ」ツ?、テ・ツ?敕ッツスツ」テッツセツ?テッツスツィテッツセツεッツスツ」テッツセツ?テァツヲツソテッツスツ」テッツセツづ」ツ?、テ・ツつャテッツスツ」テッツセツづ」ツ?、テヲツエツ・テッツスツヲテッツセツづァツッツ?ッツスツ「テッツセツεッツスツ」テッツセツ??
        int fl=18;
        for(int o=18;o>=0;o--)
        {
            bool flag=true;
            REP(k,2)
                REP(i,2)
                REP(j,2)
                if(cb[i][j][o+k] && tb[i][j][k])
                {
                    //cout<<"collid"<<i<<j<<" "<<o+k<<endl;
                    flag=false;
                    break;
                }
 
            if(!flag)
            {
                fl=o+1;
                break;
            }
            if(o==0)
                fl=0;
         
        }
         
    //  cout<<"fall:"<<fl<<endl;
 
        //テッツセツεッツスツィテッツセツづゥツ敖津ッツスツステッツセツεッツスツ」テッツセツ?テッツスツィテッツセツεッツスツ」テッツセツ??
        REP(k,2)
        REP(i,2)
        REP(j,2)
            cb[i][j][k+fl]|=tb[i][j][k];
 
        //テッツセツεッツスツヲテッツセツづッツスツカテッツセツづヲツ堋療ッツスツ」テッツセツ??
        REP(k,20)
        {
            bool fall=1;
            REP(i,2)
            REP(j,2)
            {
                if(!cb[i][j][k])
                {
                    fall=0;
                    break;
                }
            }
 
            if(fall)
            {
                tdel++;
                FOR(r,k,19)
                REP(p,2)
                REP(q,2)
                {
                    cb[p][q][r]=cb[p][q][r+1];
                }
                k--;
            }
        }
        //cout<<"dfs:"<<m+1<<tdel<<endl;
 
        mtdel = max(mtdel, dfs(m+1, tdel, cb));
    }
    return mtdel;
}
 
int main()
{
 
    vvvi c(2, vvi(2, vi(20)));
    int h;
    while(cin>>h>>n,h)
    {
	REP(i,2)
	REP(j,2)
	REP(k,20)
		c[i][j][k]=0;
        string s;
        REP(k,h)
        {
            REP(i,2)
            {
                cin>>s;
                REP(j,2)
                {
                    if(s[j]=='.')
                    {
                        c[i][j][k]=0;
                    }
                    else
                    {
                        c[i][j][k]=1;
                    }
                     
                }
            }
        }
         
        REP(l,n)
        {
            REP(k,2)
            REP(i,2)
            {
                cin>>s;
                REP(j,2)
                {
                    if(s[j]=='.')
                    {
                        b[i][j][k][l]=0;
                    }
                    else
                    {
                        b[i][j][k][l]=1;
                    }
                 
                }
            }
             
            bool flag=1;
            REP(i,2)
            REP(j,2)
            {
                if(b[i][j][0][l])
                    flag=0;
            }
            if(flag)
            {
                REP(i,2)
                REP(j,2)
                {
                    b[i][j][0][l]=b[i][j][1][l];
                    b[i][j][1][l]=0;
                }
            }
        }
 
         
         
        cout<<dfs(0,0,c)<<endl;
         
 
    }
}

Measured memory_bytes: 3112