#include <bits/stdc++.h>
using namespace std;
struct X {
  long long A, B, C;
};
struct Y {
  long long D, E, F;
};
long long INF = 1000000000;
int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
int main() {
  int N, M;
  cin >> N >> M;
  vector<X> VX(N);
  vector<Y> VY(M);
  vector<long long> H, W;
  for (int i = 0; i < N; i++) {
    cin >> VX[i].A >> VX[i].B >> VX[i].C;
    H.push_back(VX[i].A);
    H.push_back(VX[i].B);
    W.push_back(VX[i].C);
  }
  for (int i = 0; i < M; i++) {
    cin >> VY[i].D >> VY[i].E >> VY[i].F;
    W.push_back(VY[i].D);
    W.push_back(VY[i].E);
    H.push_back(VY[i].F);
  }
  H.push_back(INF + 1), H.push_back(-INF - 1);
  W.push_back(INF + 1), W.push_back(-INF - 1);
  sort(H.begin(), H.end());
  sort(W.begin(), W.end());
  H.erase(unique(H.begin(), H.end()), H.end());
  W.erase(unique(W.begin(), W.end()), W.end());
  for (int i = 0; i < N; i++) {
    VX[i].A = lower_bound(H.begin(), H.end(), VX[i].A) - H.begin();
    VX[i].B = lower_bound(H.begin(), H.end(), VX[i].B) - H.begin();
    VX[i].C = lower_bound(W.begin(), W.end(), VX[i].C) - W.begin();
  }
  for (int i = 0; i < M; i++) {
    VY[i].D = lower_bound(W.begin(), W.end(), VY[i].D) - W.begin();
    VY[i].E = lower_bound(W.begin(), W.end(), VY[i].E) - W.begin();
    VY[i].F = lower_bound(H.begin(), H.end(), VY[i].F) - H.begin();
  }
  vector<vector<vector<bool> > > V(
      H.size() - 1, vector<vector<bool> >(W.size() - 1, vector<bool>(4, true)));
  vector<vector<bool> > B(H.size() - 1, vector<bool>(W.size() - 1, false));
  for (int i = 0; i < N; i++) {
    for (int j = VX[i].A; j <= VX[i].B; j++) {
      V[j][VX[i].C - 1][1] = V[j][VX[i].C][3] = false;
    }
  }
  for (int i = 0; i < M; i++) {
    for (int j = VY[i].D; j <= VY[i].E; j++) {
      V[VY[i].F - 1][j][0] = V[VY[i].F][j][2] = false;
    }
  }
  for (int i = 0; i < H.size() - 1; i++) {
    V[i][0][3] = V[i][W.size() - 2][1] = false;
  }
  for (int i = 0; i < W.size() - 1; i++) {
    V[0][i][2] = V[H.size() - 2][i][0] = false;
  }
  int SX, SY;
  for (int i = 0; i < H.size() - 1; i++) {
    if (H[i] <= 0 && 0 < H[i + 1]) SX = i;
  }
  for (int i = 0; i < W.size() - 1; i++) {
    if (W[i] <= 0 && 0 < W[i + 1]) SY = i;
  }
  B[SX][SY] = true;
  queue<pair<int, int> > Q;
  Q.push({SX, SY});
  while (!Q.empty()) {
    pair<int, int> PP = Q.front();
    Q.pop();
    for (int i = 0; i < 4; i++) {
      if (V[PP.first][PP.second][i]) {
        int NX = PP.first + dx[i], NY = PP.second + dy[i];
        if (!B[NX][NY]) {
          B[NX][NY] = true;
          Q.push({NX, NY});
        }
      }
    }
  }
  for (int i = 0; i < V.size(); i++) {
    for (int j = 0; j < V[0].size(); j++) {
      cout << ' ' << V[i][j][2] << endl
           << V[i][j][3] << ' ' << V[i][j][1] << endl
           << ' ' << V[i][j][0] << endl;
      cout << endl;
    }
    cout << endl;
  }
  for (int i = 0; i < B.size(); i++) {
    for (int j = 0; j < B[0].size(); j++) {
      cout << B[i][j] << ' ';
    }
    cout << endl;
  }
}
