Elementary proof of $\mathbb{Q}(\zeta_n)\cap \mathbb{Q}(\zeta_m)=\mathbb{Q}$ when $\gcd(n,m)=1$.
Solution 1:
$\newcommand{\Q}{\mathbf Q}$This answer assumes that we're willing to use $[\Q(\zeta_n) : \Q] = \varphi(n)$, which is not obvious. A freely available reference is Milne's notes, Lemma 5.9 and Theorem 5.10.
Since $n$ and $m$ are coprime, the proof you gave shows that $\mathbf Q(\zeta_{nm}) = \mathbf Q(\zeta_n, \zeta_m)$, and the totient function satisfies $\varphi(nm) = \varphi(n)\varphi(m)$. Now \[ [\mathbf Q(\zeta_{nm}) : \mathbf Q] = [\mathbf Q(\zeta_n, \zeta_m) : \mathbf Q(\zeta_n)][\mathbf Q(\zeta_n) : \mathbf Q]. \] If we had $\mathbf Q(\zeta_n) \cap \mathbf Q(\zeta_m) \neq \mathbf Q$ then the degree of $\zeta_m$ over $\mathbf Q(\zeta_n)$ would be less than $\varphi(m)$.
Solution 2:
This is a complement to Dylan's answer: we prove that $\mathbb{Q}(\zeta_{mn})=\mathbb{Q}(\zeta_m,\zeta_n)$.
We have $(\zeta_m)^{mn}=1^n=1$ and $(\zeta_n)^{nm}=1^m=1$, and so the inclusion $\mathbb{Q}(\zeta_{mn})\supseteq\mathbb{Q}(\zeta_m,\zeta_n)$ is clear. Conversely, $\zeta_{mn}^m$ is a primitive $n$-th root of unity, and $\zeta_{mn}^n$ is a primitive $m$-th root of unity, which gives the reverse inclusion.
I believe this is as elementary as it gets.