We can use max.col
colnames(m)[max.col(m, "first")]
#[1] "A" "B" "C" "B" "B" "A"
If there are no TRUE in a row, then we can change it to NA
(if needed)
colnames(m)[max.col(m, "first")*NA^!rowSums(m)]
Or with ifelse
colnames(m)[ifelse(rowSums(m)==0, NA, max.col(m, "first"))]