Question: How can I subtitute without geting the result correctly?

When I input
restart;
a := 2;
b := 3;
p := x^2 - a*x - b*x +a*b ;

I get p := x^2 - 5*x + 6
How can I get x^2 - 2 x - 3x + 6.
General question. I have (a,b) in a list [[2,3],[-3,7],[9,10]]. How to subtitute them to get the result
[[x^2 - 2x - 3x + 6, x^2 + 3x - 7x -21, x^2 - 9x - 10x + 90]? 

Please Wait...