what i think, you're using FCM for full message delivery, which batches and delays at scale and apps like telegram etc, use FCM only as a "wake-up call," not for message delivery.
You can try with few stpes:
Build a persistent WebSocket connection from your app to your own servers
Send minimal FCM payloads with just a "wake up" signal
When FCM arrives, your app wakes up and instantly fetches the actual message through your fast WebSocket connection
This hybrid approach gives you FCM's universal reach for waking devices, but your own optimized channel for actual message delivery, eliminating the 5-10 minute delays.