#include<bits/stdc++.h>
using namespace std;
using Int = long long;
template<typename T1,typename T2> inline void chmin(T1 &a,T2 b){if(a>b) a=b;}
template<typename T1,typename T2> inline void chmax(T1 &a,T2 b){if(a<b) a=b;}

//INSERT ABOVE HERE
const int MAX = 101;
int C[2][2][MAX];
int B[2][2][2][3];

int D[2][2][MAX];
int E[2][2][MAX];
signed main(){
  int h,n;
  while(cin>>h>>n,h){
    memset(C,0,sizeof(C));
    for(int i=0;i<h;i++){
      string s[2];
      cin>>s[0]>>s[1];
      for(int j=0;j<2;j++)
        for(int k=0;k<2;k++)
          C[j][k][i]=s[j][k]=='#';
    }

    for(int t=0;t<n;t++){
      for(int i=0;i<2;i++){
        string s[2];
        cin>>s[0]>>s[1];
        for(int j=0;j<2;j++)
          for(int k=0;k<2;k++)
            B[j][k][i][t]=s[j][k]=='#';
      }
    }

    int ans=0;
    int sz=1;
    for(int i=0;i<n;i++) sz*=9;
    for(int bit=0;bit<sz;bit++){
      vector<int> dj(n),dk(n);
      int tmp=bit;
      // cout<<tmp<<endl;
      for(int t=0;t<n;t++){
        dj[t]=(tmp%3)-1;
        tmp/=3;
        dk[t]=(tmp%3)-1;
        tmp/=3;
      }
      auto in=[&](int j,int k){return 0<=j&&j<2&&0<=k&&k<2;};

      for(int i=0;i<MAX;i++)
        for(int j=0;j<2;j++)
          for(int k=0;k<2;k++)
            D[j][k][i]=C[j][k][i];

      int flg=0;
      int res=0;
      for(int t=0;t<n;t++){
        int nx[2][2][2]={};
        for(int i=0;i<2;i++)
          for(int j=0;j<2;j++)
            for(int k=0;k<2;k++)
              if(B[j][k][i][t]&&!in(j+dj[t],k+dk[t])) flg=1;

        //cout<<dj[0]<<" "<<dk[0]<<":"<<flg<<endl;
        if(flg) break;

        for(int i=0;i<2;i++)
          for(int j=0;j<2;j++)
            for(int k=0;k<2;k++)
              if(B[j][k][i][t])
                nx[j+dj[t]][k+dk[t]][i]=1;
        {
          int sm=0;
          for(int j=0;j<2;j++)
            for(int k=0;k<2;k++)
              sm+=nx[j][k][0];
          if(sm==0)
            for(int j=0;j<2;j++)
              for(int k=0;k<2;k++)
                swap(nx[j][k][0],nx[j][k][1]);
        }

        int y=MAX-10;
        for(;y>=0;y--){
          int mx=0;
          for(int i=0;i<2;i++){
            for(int j=0;j<2;j++){
              for(int k=0;k<2;k++){
                D[j][k][y+i]+=nx[j][k][i];
                chmax(mx,D[j][k][y+i]);
              }
            }
          }

          for(int i=0;i<2;i++)
            for(int j=0;j<2;j++)
              for(int k=0;k<2;k++)
                D[j][k][y+i]-=nx[j][k][i];

          if(mx==2){
            y++;
            break;
          }
          if(y==0) break;
        }
        // cout<<t<<":"<<dj[t]<<" "<<dk[t]<<":"<<y<<endl;

        for(int i=0;i<2;i++)
          for(int j=0;j<2;j++)
            for(int k=0;k<2;k++)
              D[j][k][y+i]+=nx[j][k][i];

        for(int i=0;i<MAX;i++)
          for(int j=0;j<2;j++)
            for(int k=0;k<2;k++)
              E[j][k][i]=0;

        for(int i=0,p=0;i<MAX;i++){
          int sum=0;
          for(int j=0;j<2;j++)
            for(int k=0;k<2;k++)
              sum+=D[j][k][i];
          if(sum==4){
            res++;
            continue;
          }
          for(int j=0;j<2;j++)
            for(int k=0;k<2;k++)
              E[j][k][p]=D[j][k][i];
          p++;
        }

        for(int i=0;i<MAX;i++)
          for(int j=0;j<2;j++)
            for(int k=0;k<2;k++)
              D[j][k][i]=E[j][k][i];
      }
      if(flg) continue;
      chmax(ans,res);
    }
    cout<<ans<<endl;
  }
  return 0;
}



Measured memory_bytes: 3140