ループのところ
do i=1, n
b(i) = 0
do k=1,n
b(i) = b(i) +M(i, k) * a(k)
end do
end do

直接関係ないけど、Mの行と列を入れかえたほうがいいかも。