#include<iostream>
#include<utility>
#include<algorithm>
#define N 100
#define M 50
#define Pair pair<int, int>
#define x first
#define y second

using namespace std;

int n, m;
int data[N][N], data_[4][M][M];
Pair p[4];

void spin(int k){
  for(int i=0; i<m; ++i){
    for(int j=0; j<m; ++j){
      data_[k][m-j-1][i] = data_[k-1][i][j];
    }
  }
}

void top_point(){
  for(int k=0; k<4; ++k){
    for(int i=0; i<m; ++i){
      if(data_[k][0][i] != -1){
	p[k].x=0; p[k].y=i; break;
      }
    }
  }
}

bool check(int u, int v, int k, int i, int j){
  if(data_[k][i][j] == -1) return true;
  return data[u][v] == data_[k][i][j];
}

bool solve2(int u, int v, int k){
  for(int i=0; i<m; ++i){
    for(int j=0; j<m; ++j){
      if(!check(u+i, v+j, k, i, j)) return false;
    }
  }
  return true;
}

bool solve(Pair* pair){
  for(int u=0; u<=n-m; ++u){
    for(int v=0; v<=n-m; ++v){
      for(int k=0; k<4; ++k){
	if(solve2(u, v, k)){
	  pair->x = u + p[k].x;
	  pair->y = v + p[k].y;
	  return true;
	}
      }
    }
  }
  return false;
}

int main(){
  while(1){
    cin >> n >> m;
    if(!n && !m) break;
    for(int i=0; i<n; ++i){
      for(int j=0; j<n; ++j){
	cin >> data[i][j];
      }
    }
    for(int i=0; i<m; ++i){
      for(int j=0; j<m; ++j){
	cin >> data_[0][i][j];
      }
    }
    spin(1);
    spin(2);
    spin(3);
    top_point();
    Pair pair;
    if(solve(&pair)) cout << pair.y+1 << " " << pair.x+1 << endl;
    else cout << "NA" << endl;
  }
  return 0;
}