Dylan Groenewegen doubled up at the Tour de France with his second win in as many days.
The Dutchman followed up Friday's success in Chartres with a Bastille Day win in Amiens on stage eight.
The Lotto-NL Jumbo rider burst clear of world champion Peter Sagan and held off Lotto-Soudal's Andre Greipel and Quick-Step Floors' Fernando Gaviria before the latter pair were relegated for irregular sprinting.
That gave Sagan second place and John Degenkolb of Trek-Segafredo third.
Mark Cavendish, looking to turn around a frustrating start to the Tour, was on the wheel of Sagan as the peloton rounded a left-hander on to the finishing straight with 600 metres to go.
But the Dimension Data man appeared to brush wheels with Groenewegen and did not truly contest the sprint before rolling home in 10th on the road, up to eighth once Greipel and Gaviria were removed from the results.
Most of the general classification contenders crossed the line in the main bunch to hold station but UAE Team Emirates' Dan Martin lost 76 seconds after being caught in a crash with 17 kilometres to go.
The Irishman, winner of stage six on the Mur-de-Bretagne, was one of several riders to fall with Quick-Step Floors' Julian Alaphilippe and Tom Skujins in the polka-dot jersey also caught out.
Martin, with blood pouring from his elbow, quickly set off in pursuit of the peloton with several team-mates to help.
They got within 30 seconds but as the pace ramped up at the front, the gap soon began to grow again, with Martin left to rue an expensive tumble.
BMC's Greg Van Avermaet retained the yellow jersey, and extended his lead by one second to seven over Team Sky's Geraint Thomas after nicking third place on the bonus sprint.