L(G1) = {a^+b^+ | b^+}
{b, bb, bbb, ab, aab, abb, aabb, ...}
L(G2) = {a^+b* | b^+}
{b, bb, bbb, …, a, aa, aaa, …, ab, aab, abb, ...}
A. {a^mb^n | m>0 or n>0} and {a^mb^n | m > 0 and n>0}
L1 generates strings of form a^+ when m = 1 and n = 0 which does not belong to L(G1). so this rules out option A.
B. {a^mb^n | m > 0 and n > 0} and {a^mb^n | m > 0 or n >= 0}
L1 here generates: {ab, aab, abb, aabb, ...} ; this Language does not contain strings like b, bb, and so on. so Option B is incorrect.
C. {a^mb^n | m >= 0 or n > 0} and {a^mb^n | m > 0 and n > 0}
L1 contains epsilon when m = 0 and n = 0; which clearly does not belong to L(G1).
D. {a^mb^n | m >= 0 and n > 0} and {a^mb^n | m > 0 or n > 0}
L1: {b, bb, bbb, …, ab, aab, abbb, ...} ; L2: {a, aa, aaa, …, b, bb, …, ab, aab, abb, aaabb, …}
L1 = L(G1) , L2 = L(G2)
hence, option D is correct.