#include <bits/stdc++.h>
using namespace std;
int main() {
  ios_base::sync_with_stdio(false);
  int w, h, k;
  cin >> h >> w >> k;
  vector<int> ver(w, -1), hor(h, -1);
  vector<pair<pair<int, int>, int> > op(k);
  vector<tuple<int, pair<pair<int, int>, int> > > op2;
  for (int((i)) = (0); ((i)) < ((k)); ((i))++) {
    cin >> op[i].first.first >> op[i].first.second >> op[i].second;
    op[i].first.second--;
    if (op[i].first.first == 1)
      hor[op[i].first.second] = i;
    else
      ver[op[i].first.second] = i;
  }
  for (int((x)) = (0); ((x)) < ((w)); ((x))++)
    if (ver[x] != -1) op2.push_back(make_tuple(ver[x], op[ver[x]]));
  for (int((y)) = (0); ((y)) < ((h)); ((y))++)
    if (hor[y] != -1) op2.push_back(make_tuple(hor[y], op[hor[y]]));
  sort((op2).begin(), (op2).end());
  vector<vector<int> > ans(w, vector<int>(h, 0));
  for (int((i)) = (0); ((i)) < ((op2.size())); ((i))++) {
    pair<pair<int, int>, int> t = get<1>(op2[i]);
    if (t.first.first == 1)
      for (int((x)) = (0); ((x)) < ((w)); ((x))++)
        ans[x][t.first.second] = t.second;
    else
      for (int((y)) = (0); ((y)) < ((h)); ((y))++)
        ans[t.first.second][y] = t.second;
  }
  for (int((y)) = (0); ((y)) < ((h)); ((y))++) {
    for (int((x)) = (0); ((x)) < ((w)); ((x))++) cout << ans[x][y] << " ";
    cout << "\n";
  }
}
