well, I've never trained a puppy, ours was a rescue and he used to drag me down the street when we firts got him.
It took me 5 months. But that was in stages, so 1 week to stop the drag and yank. Then a few weeks to go from hard pull to just pulling and the rest to get from pulling to loose lead.
Your goal is loose lead. That means walking at your side with the lead loose in a j shape.
The problem is that if all your walks are lead walks, that doesn't allow for much sniffing etc.
This is how I did it - I wathce d5 million youtube videos!
When he pulled, I stopped dead. When he moved so that the lead was loose, I started walking and gave him a positive 'walk' command as we started off. Initially this was literlaly one step and stop, half a step and stop. It took me half and hour to get to the end of our short road. But that is massive tiring mental exercise for them as they are working all the time.
He was pretty stubborn (3 years to unpick) so I went further. When I stopped, if he kept pulling I slowly started walking backwards. he veyr quickly responded to that.
He still pulls sometimes, and when he is bad, I will also turn round, walk back a few steps and stop. Make him look at me, turn so he is next to me, standing still and looking, and then give the command 'walk' as we set off again.
I also used a lot of treats, so once he sort of got it, I would hold a treat in my hand and he would walk by my side eyeing up the treat and then get one every 10 paces he walked at heel.
we use a harness, can't stand dogs pulling on their neck