Looking at your sequence diagram, you're actually correct - there are three valid traces, not just two!
Let me explain why:
Valid Traces
(m1!, m2?, m2!, m2?) - left:Client sends m1, Server receives it, Server sends m2 to right:Client, right:Client receives it
(m2!, m1!, m1?, m2?) - Server sends m2 first, then left:Client sends m1, Server receives m1, then right:Client receives m2
(m1!, m2!, m1?, m2?) - left:Client sends m1, Server sends m2, Server receives m1, right:Client receives m2 ✓ This is valid!
Why the third trace is valid
In asynchronous communication (which is typical for sequence diagrams with send/receive notation using ! and ?):
m1! = left:Client sends message m1 (doesn't require immediate receipt)
m2! = Server sends message m2 (doesn't require immediate receipt)
m1? = Server receives message m1
m2? = right:Client receives message m2
Messages can be "in flight" - sent but not yet received. So:
left:Client can send m1 (m1!)
Server can send m2 before receiving m1 (m2!)
Server then receives m1 (m1?)
right:Client receives m2 (m2?)
This is perfectly valid in asynchronous messaging systems where sends are non-blocking and messages can overtake each other or be processed in different orders.
Your book may have overlooked this trace or may be making an unstated assumption about synchronous behavior. But based on standard sequence diagram semantics with asynchronous messaging, you found a valid third trace.