Simon Yates triumphed on stage 19 of the Giro d’Italia in Alpe di Mera, as race leader Egan Bernal limited his losses.
Britain’s Yates attacked on the final 10-kilometre climb of the 166km mountain stage from Abbiategrasso to Alpe di Mera.
The Team BikeExchange rider pulled clear of the general classification group inside the final six kilometres.
Race leader Bernal was supported by his Ineos Grenadiers teammates, who helped pace the Colombian towards the finish.
Yates remained clear to secure a stage victory in a time of 4 hours 2min 55sec.
He finished 11 seconds clear of Portugal’s João Almeida, with Bernal crossing 28 seconds down on the stage winner in third.
Bernal was able to gain four seconds over Italy’s Damiano Caruso, who began the stage in second place.
"I'm really happy, the team did a fantastic job today," said Yates.
"We controlled the start, rode well behind and then I finished it off.
"I saw the boys from Ineos were just happy to ride at tempo behind so I had a feeling they would let me go today.
"It was not the most difficult stage, it'll be different tomorrow at a higher altitude.
"I don't have any regrets for the way I rode on the first week, I had some little problems and I think I managed everything the best I could.
"The gap to the Maglia Rosa is still quite important but I am closer to Caruso now who is in second place."
Bernal holds a 2:29 lead over Bahrain Victorious’ Caruso heading into the final two stages of the race.
Caruso has a 20 second cushion over third placed Yates, who has looked increasingly strong in the final week.
Riders face a 164km mountain stage from Verbania to Valle Spluga tomorrow, before the race concludes with a 30km individual time trial from Senago to Milan on Sunday (May 30).
Prize money on today’s stage was donated to the victims of a cable car disaster in Mottarone last week, which resulted in the deaths of 14 people.
Today’s stage had been due to include a climb in Mottarone, which was removed on an amended route.