The Foxwell NT510 Elite is a great pick. I personally use one, and it can read codes from all systems. What's cool is it can also handle crankshaft relearn and battery registration, which can save you a bunch of money. While ISTA/INPA can do similar things, they're a bit tricky to navigate. Check out this review for more details to help you make a decision.
https://www.obdadvisor.com/bmw-scan-tool/