Olivier Giroud’s late brace turned the Milan derby on its head and opened up the race for the Scudetto.
Inter went in front six minutes before the break when Ivan Perisic met Hakan Calhanoglu’s corner with a low volley from ten yards out.
The league leaders dominated the game from this point onwards until 15 minutes from time when substitute Brahim Diaz’s deflected shot drifted to the far post where Giroud poked it home.
Three minutes later the French striker won the game when he received a ball inside the box from Davide Calabria and turned Stefan de Vrij before shooting at goal and though Samir Handanovic got a hand to the ball he could not keep it out.
Milan finished the game with ten men after Theo Hernandez was sent off in stoppage time for a tactical lunge to stop Denzel Dumfries breaking down the right flank.
Inter are now just a point clear of their city rivals at the top of Serie A.