"No body will need more than 640k on a computer"
That was Gates accepting a compromise. IBM's architecture for the PC put the BIOS and ROMs up at the top of the 1M memory map, creating an ugly barrier and preventing a flat memory model. That was not a decision Gates made, though it wasn't seen as a big deal at the time.
The history of the early IBM PC is that the first motherboard had 16K of RAM and you could install 3 more banks of 16K to bring the memory on the motherboard to 64K. Any more memory you had to install on an expansion board that plugged into an ISA slot. (there were only five slots on the original motherboard, too, one tied up with the video card, another for the floppy controller, if you had a floppy and didn't use Microsoft's BASIC interpreter in ROM and save you programs to the cassette interface which existed on the early IBM motherboards). 640K was a humongous amount of RAM and very few people would ever be able to afford that much.
Soon after the first motherboards, though, the second generation IBM-PC had one bank of 64K chips soldered in and could accept three more banks for a total of 256K. People who wanted more would be an ISA card like the popular 'Six Pack' card which had more banks for RAM and serial/parallel ports and maybe a battery backed real time clock. None of this stuff was native on an IBM motherboard of that era. The PC-XT motherboards that could accommodate 640K right on the motherboard came considerably later.
About CP/M: I used CP/M. Lots of people used CP/M. I even still have CP/M-86 for the IBM PC. It was commercially available for the IBM-PC, there were multiple OSes you could purchase from IBM to run on your PC. The most practical choice turned out to be PC-DOS from Microsoft.
CP/M was no more functional than PC-DOS.