Semantically, you use <p> tags to indicate paragraphs. <span> is used to apply CSS style and/or class(es) to an arbitrary section of text and inline elements.
p element is a block level, therefore, add padding and margin before and after the line/ text. But span is inline element and therefore does not add any padding and margin before and after the line. We actually use span element for styling purpose and it has not semantic meaning in HTML, however, the p element is block element and has semantic meaning in HTML.