package main
import (
"bufio"
"io"
"os"
)
func main() {
data, _ := io.ReadAll(os.Stdin)
idx := 0
nxt := func() int64 {
n := len(data)
for idx < n {
c := data[idx]
if c > ' ' {
break
}
idx++
}
sign := int64(1)
if idx < n && data[idx] == '-' {
sign = -1
idx++
}
val := int64(0)
for idx < n {
c := data[idx]
if c < '0' || c > '9' {
break
}
val = val*10 + int64(c-'0')
idx++
}
return val * sign
}
n := int(nxt())
m := int(nxt())
k := int(nxt())
rowTime := make([]int, n+1)
rowColor := make([]int64, n+1)
colTime := make([]int, m+1)
colColor := make([]int64, m+1)
for t := 1; t <= k; t++ {
op := int(nxt())
p := int(nxt())
a := nxt()
if op == 1 {
rowTime[p] = t
rowColor[p] = a
} else {
colTime[p] = t
colColor[p] = a
}
}
w := bufio.NewWriterSize(os.Stdout, 1<<20)
defer w.Flush()
writeInt := func(x int64) {
if x == 0 {
w.WriteByte('0')
return
}
if x < 0 {
w.WriteByte('-')
x = -x
}
var buf [20]byte
i := len(buf)
for x > 0 {
i--
buf[i] = byte('0' + x%10)
x /= 10
}
w.Write(buf[i:])
}
for i := 1; i <= n; i++ {
for j := 1; j <= m; j++ {
var v int64
if rowTime[i] > colTime[j] {
v = rowColor[i]
} else {
v = colColor[j]
}
writeInt(v)
if j < m {
w.WriteByte(' ')
}
}
if i < n {
w.WriteByte('\n')
}
}
}