Red Bull’s Max Verstappen won the French Grand Prix after Charles Leclerc dramatically spun out while leading.
Leclerc led away from pole, as Verstappen resisted a challenge from the fast-starting Hamilton to remain in second.
The front two pulled over six seconds clear of Hamilton in as many laps, with Leclerc coming under increasing pressure from Verstappen.
The Dutchman made one half attempt at an overtake through Signe corner before dropping back to over 1s behind and pitting to switch from medium to hard compound tyres on lap 17.
As Leclerc pushed before his own stop, the Ferrari driver inexplicably spun off and retired after making light contact with the barriers.
The safety car was deployed, with many drivers using the opportunity to make their mandatory pitstop.
Hamilton, who had pulled 3s clear of Perez before the safety car intervention, lined up second when racing resumed but was unable to keep pace with Verstappen and dropped over 4s back.
A sideways moment cost the Mercedes driver more time, but he still finished in a comfortable second, as Verstappen trumphed by 10.587s.
George Russell moved past Lando Norris into fifth at the start, and moved up a further place when Leclerc retired.
Having started on the back row following a power unit change, Carlos Sainz climbed though the field to sixth after the safety car period. But the Ferrari driver had a 5s time penalty hanging over him for an unsafe release while pitting to switch from hard to medium compound tyres.
The Spaniard swept past Russell and Perez into third, but then pitted for a second time to serve his penalty and take on a new set of medium tyres before coming home a distant fifth.
Russell started to pressure Perez for third before diving up the inside into the chicane. But the Red Bull driver remained in front, having been forced off the track.
But Russell would get another opportunity. Alfa Romeo’s Guanyu Zhou retired and triggered a late virtual safety car period. When the green flags were waved, Russell got up to speed quicker than Perez to snatch third. He then resisted the Mexican’s renewed challenge until the finish.
Alpine’s Fernando Alonso finished sixth ahead of Norris, having moved in front of the McLaren driver at the start before coming home 10s clear.
Alonso’s team-mate Esteban Ocon finished eighth, despite serving a 5s penalty for early contact with Yuki Tsunoda, who was spun to the rear of the field. The Alpha Tauri driver later retired from the race.
Daniel Ricciardo was ninth for McLaren, while Lance Stroll beat Sebastian Vettel to tenth in a fierce final lap battle between the Aston Martin team-mates.
Nicholas Latifi (Williams) and Kevin Magnussen (Haas) also failed to see the chequered flag.
Featured image credit: @f1 official twitter