Si está agrupando por una (o más) columna, debe hacer algo con todas las columnas no agrupadas para que su consulta tenga sentido.
Tienes que decir lo que quieres que se haga con todos los valores agrupados. Por lo general, algo como SUM(), AVG(), MIN(), MAX(), GROUP_CONCAT()
Si está agrupando por m_from, entonces no podrá ordenar por m_time, ya que todos los registros para m_from se agruparán, y para los valores no agrupados obtendrá una respuesta arbitraria, ya que no lo hizo. especificar qué hacer con el grupo.
Probablemente quiera usar una función agregada, como MAX(m_time) para obtener el valor más alto para m_time, y luego ordenarlo.
Yo sugeriría algo como.
SELECT MAX(m_id),m_from, MAX(m_time) as latest FROM messages
WHERE m_to='XXX' OR m_from='XXX'
GROUP BY m_from
ORDER BY latest DESC;