Greg Van Avermaet (CCC) was back to winning ways as he timed his sprint to perfection to take victory at the GP de Montréal, two days after coming third in Québec.
Diego Ulissi (UAE Team Emirates) finished second with Iván García Cortina third (Bahrain-Merida), while Tim Wellens (Lotto-Soudal) and Michael Valgren (Dimension Data) rounded out the top five.
Julian Alaphilippe (Deceuninck – Quick-Step) had been on the attack before he was reeled in by Ulissi in the finishing straight, with Van Avermaet then coming through to take his second victory in the Canadian race, having previously won in 2016.
Nans Peters (Ag2r La Mondiale) attacked with just over 10km to go on the final ascent of Mont Royal, thinning the peloton massively, before Michael Woods (EF Education First) took over on the front of the bunch, then handing over to Enric Mas (Deceuninck – Quick-Step).
With 9km to go, a front group of only around 20 riders were left, as Benoît Cosnefroy kicked again for Ag2r La Mondiale, with Sunweb trying to chase as GP de Québec winner Michael Matthews missed the selection.
The front group were reluctant to chase, the gap at nine seconds, with Peter Sagan (Bora-Hansgrohe) having made the selection and his rivals not wanting to tow him to the line.
Tim Wellens attacked with 6.5km remaining, as Mas worked to bring Wellens back in. Wellens then kicked again, Mas on his tail, as Michael Valgren also chased. Greg Van Avermaet reacted, as did Sagan, with the front group starting to realising the danger of groups getting away off the front.
Mas counter-attacked with 4.3km to go, gaining a gap on the group behind with Cosnefroy 12 seconds ahead up front. Julian Alaphilippe then launched when his Deceuninck team-mate Mas was caught with 3km remaining, soon catching Cosnefroy as Sagan also began to ride across the gap.
Alaphilippe and Cosnefroy ducked down onto their top tubes round a corner with 1.5km to go, as Alaphilippe shook his legs, ready for the fight to come, with Sagan mounting the chase behind.
Cosnefroy banged his handlebars as Alaphilippe declined to take a turn and attacked his younger countryman. Ulissi then caught Alaphilippe in the last 300m of the finishing straight before Greg Van Avermaet timed his attack perfectly, coming past the Italian to take a much-needed victory after a year that has not seen the Olympic champion pick up many big wins.
GP de Montréal 2019: Montréal to Montréal (219.6km)
1. Greg Van Avermaet (Bel) CCC, in 6-09-38
2. Diego Ulissi (Ita) UAE Team Emirates
3. Iván García Cortina (Esp) Bahrain-Merida
4. Tim Wellens (Bel) Lotto-Soudal
5. Michael Valgren (Den) Dimension Data
6. Kristian Sbaragli (Ita) Israel Cycling Academy
7. Rui Costa (Por) UAE Team Emirates
8. Michael Woods (Can) EF Education First
9. Nans Peters (Fra) Ag2r La Mondiale
10. Bauke Mollema (Ned) Trek-Segafredo, all at same time