#include<iostream>
#include<cstdio>
#include<vector>
#include<cmath>
#include<algorithm>
#define F first
#define S second
using namespace std;
typedef vector<int> VI;
typedef vector<VI> VVI;
typedef pair<int,int> P;

void Input(VVI& G,int n)
{
  for(int i=0;i<n;i++)
    {
      G[i].resize(n);
      for(int j=0;j<n;j++)
	{
	cin >> G[i][j];

	}
     
    }
}

VVI rotate90(VVI G)
{
  int n = G.size();

  VVI ret;
  ret.resize(n);

  for(int i=0;i<n;i++)
    {
      ret[i].resize(n);
      for(int j=0;j<n;j++)
	ret[i][j] = G[j][n-i-1];
    }

  return ret;
}

bool check(VVI& G,VVI& G2, P p)
{

  for(int i=p.S;i<p.S+G2.size();i++)
    {
      for(int j=p.F;j<p.F+G2.size();j++)
	{	
	  if(G2[i-p.S][j-p.F] == -1)
	    continue;
	  else if(!(i < G.size() && j < G.size()) )
	    return false;
	  else if(G[i][j] != G2[i-p.S][j-p.F])
	    return false;
	}
 
    }
  return true;
}

int main()
{
  int n,m;
  while(cin >> n >> m,n|m)
    {
     
      VVI G,G2;
      bool Fin = false;
      G.resize(n);
      G2.resize(m);
      Input(G,n);    
      Input(G2,m);
      vector<P> vec;
    
      for(int x = 0; x < 4; x++){
	
	for(int i=0;i<G.size();i++)
	  {
	    for(int j=0;j<G.size();j++)
	      {
		if(check(G,G2,P(j,i)))
		{
		  Fin = true;
		  bool f = false;
		  for(int k=0;k<G2.size();k++)
		    {
		    for(int l=0;l<G2.size();l++)
		      {
			if(G2[k][l] != -1)
			  {
			    vec.push_back(P(i+k+1,j+l+1));
			    f = true;
			    break;
			  }
		      }
		    if(f)
		      break;
		    }
		
		}
	      }
	  }

	G2 = rotate90(G2); 
      }
      
      sort(vec.begin(),vec.end());

      if(!vec.size())
	cout << "NA" << endl;
      else 
	cout << vec[0].S << " " << vec[0].F << endl;

    }
  return 0;
}