#include <bits/stdc++.h>
using namespace std;
struct state {
  int len, link;
  map<char, int> next;
  bool is_clon;
  int first_pos;
  vector<int> inv_link;
};
void solution();
string enc(string s);
int dfs(map<pair<long long, long long>, long long> m,
        map<pair<long long, long long>, long long>::iterator it);
stack<clock_t> times;
const int MAXLEN = 100000;
state st[MAXLEN * 2];
int sz, last;
void start_t() { times.push(clock()); }
void stop_t(string out) {
  clock_t now = clock();
  clock_t past = times.top();
  times.pop();
  double delta = now - past;
  cout << out << ": " << fixed << delta / (double)CLOCKS_PER_SEC << endl;
}
int main() {
  ios::sync_with_stdio(false);
  solution();
  return 0;
}
void solution() {
  int n, m;
  cin >> n >> m;
  int** color = new int*[n];
  for (int i = 0; i < n; i++) {
    color[i] = new int[m];
    for (int j = 0; j < m; j++) color[i][j] = 0;
  }
  bool* used = new bool[n + m];
  for (int i = 0; i < n + m; i++) used[i] = false;
  int k;
  cin >> k;
  pair<int, int>* q = new pair<int, int>[k];
  for (int i = 0; i < k; i++) {
    int t;
    cin >> t;
    cin >> q[i].first >> q[i].second;
    q[i].first--;
    if (t == 2) q[i].first += n;
  }
  for (int i = k - 1; i >= 0; i--) {
    if (!used[q[i].first]) {
      used[q[i].first] = true;
      if (q[i].first >= n) {
        for (int j = 0; j < n; j++)
          if (!color[j][q[i].first - n]) color[j][q[i].first - n] = q[i].second;
      } else {
        for (int j = 0; j < m; j++)
          if (!color[q[i].first][j]) color[q[i].first][j] = q[i].second;
      }
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) cout << color[i][j] << ' ';
    cout << endl;
  }
}
