[proofplan]
We compare ordinals in the ultrapower using representatives modulo $U$. The key point is that $\kappa$-completeness forces every function from $\kappa$ into an ordinal $\alpha < \kappa$ to be constant on a $U$-large set, so all ordinals below $\kappa$ are fixed by the ultrapower embedding. Non-principality then implies that every bounded subset of $\kappa$ is $U$-small, hence every tail of $\kappa$ is $U$-large; this places the identity function strictly above each constant $\beta < \kappa$ and strictly below the constant $\kappa$. Therefore $j$ fixes all ordinals below $\kappa$ but moves $\kappa$, so the critical point is exactly $\kappa$.
[/proofplan]
[step:Show that functions into ordinals below $\kappa$ are constant modulo $U$]
Throughout the proof, if $f: \kappa \to V$ is a function, we write $[f]_U$ for the image under the collapse $\pi$ of its $U$-equivalence class in $\operatorname{Ult}(V,U)$. Membership and ordinal comparisons between such representatives are computed by Łoś's theorem for the ultrapower, transported through the transitive collapse $\pi$.
For each ordinal $\beta \leq \kappa$, let $c_\beta: \kappa \to V$ denote the constant function $\xi \mapsto \beta$; in particular, $c_\kappa$ denotes the constant function with value $\kappa$.
Let $\alpha < \kappa$ be an ordinal, and let $f: \kappa \to \alpha$ be a function. For each $\gamma < \alpha$, define the fiber
\begin{align*}
A_\gamma := \{\xi < \kappa : f(\xi)=\gamma\}.
\end{align*}
Suppose, toward a contradiction, that $A_\gamma \notin U$ for every $\gamma < \alpha$. Since $U$ is an ultrafilter on $\kappa$, this implies $\kappa \setminus A_\gamma \in U$ for every $\gamma < \alpha$. Because $\alpha < \kappa$ and $U$ is $\kappa$-complete, the intersection
\begin{align*}
\bigcap_{\gamma < \alpha}(\kappa \setminus A_\gamma)
\end{align*}
belongs to $U$. But the fibers $(A_\gamma)_{\gamma < \alpha}$ cover $\kappa$, since $f$ maps $\kappa$ into $\alpha$. Hence this intersection is $\varnothing$, contradicting $\varnothing \notin U$. Therefore there is some $\gamma < \alpha$ such that $A_\gamma \in U$.
Let $c_\gamma: \kappa \to V$ denote the constant function $\xi \mapsto \gamma$. Since $\{\xi < \kappa : f(\xi)=c_\gamma(\xi)\}=A_\gamma \in U$, the functions $f$ and $c_\gamma$ represent the same element of the ultrapower:
\begin{align*}
[f]_U=[c_\gamma]_U.
\end{align*}
[guided]
Fix an ordinal $\alpha < \kappa$ and a function $f: \kappa \to \alpha$. We want to prove that $f$ is equivalent modulo $U$ to a constant function. Equivalence modulo $U$ means equality on a set belonging to the ultrafilter $U$.
For each possible value $\gamma < \alpha$, define the fiber
\begin{align*}
A_\gamma := \{\xi < \kappa : f(\xi)=\gamma\}.
\end{align*}
These fibers partition $\kappa$, because every value of $f$ lies in $\alpha$. If no fiber were $U$-large, then $A_\gamma \notin U$ for every $\gamma < \alpha$. Since $U$ is an ultrafilter, exactly one of a set and its complement belongs to $U$, so $\kappa \setminus A_\gamma \in U$ for every $\gamma < \alpha$.
Now we use the hypothesis that $U$ is $\kappa$-complete. The family of complements has size $\alpha$, and $\alpha < \kappa$, so $\kappa$-completeness gives
\begin{align*}
\bigcap_{\gamma < \alpha}(\kappa \setminus A_\gamma)\in U.
\end{align*}
But this intersection consists of those $\xi < \kappa$ such that $f(\xi)$ is not equal to any $\gamma < \alpha$. Since $f(\xi)\in\alpha$ for every $\xi < \kappa$, no such $\xi$ exists. Thus
\begin{align*}
\bigcap_{\gamma < \alpha}(\kappa \setminus A_\gamma)=\varnothing.
\end{align*}
This contradicts the defining property of a proper ultrafilter, namely $\varnothing \notin U$.
Therefore at least one fiber is $U$-large: there is some $\gamma < \alpha$ such that $A_\gamma \in U$. If $c_\gamma: \kappa \to V$ is the constant function $\xi \mapsto \gamma$, then $f$ and $c_\gamma$ agree exactly on $A_\gamma$. Since $A_\gamma \in U$, they define the same ultrapower class:
\begin{align*}
[f]_U=[c_\gamma]_U.
\end{align*}
[/guided]
[/step]
[step:Fix every ordinal below $\kappa$]
We prove by transfinite induction on $\alpha < \kappa$ that $j(\alpha)=\alpha$. For $\alpha=0$, the ordinal $j(0)$ is represented by the constant function with value $0$, so $j(0)=0$.
Now let $0<\alpha<\kappa$, and assume that $j(\beta)=\beta$ for every $\beta < \alpha$. In the ultrapower, $j(\alpha)$ is represented by the constant function
\begin{align*}
c_\alpha: \kappa \to V,\qquad \xi \mapsto \alpha.
\end{align*}
Let $x \in M$ satisfy $x < j(\alpha)$ in the ordinal order of $M$. Choose a representative $f: \kappa \to V$ with $x=[f]_U$. By Łoś's theorem applied to the ordinal-order formula inside the ultrapower, and interpreting $f(\xi) < \alpha$ as false whenever $f(\xi)$ is not an ordinal, we obtain
\begin{align*}
\{\xi < \kappa : f(\xi) < \alpha\}\in U.
\end{align*}
Define $g: \kappa \to \alpha$ by setting $g(\xi)=f(\xi)$ when $f(\xi)<\alpha$, and $g(\xi)=0$ otherwise. Then $f=g$ on a $U$-large set, so $[f]_U=[g]_U$. By the preceding step, $g$ is equal modulo $U$ to some constant function $c_\gamma$ with $\gamma < \alpha$. Hence
\begin{align*}
x=[f]_U=[g]_U=[c_\gamma]_U=j(\gamma)=\gamma.
\end{align*}
Thus every element of $j(\alpha)$ is an ordinal $\gamma < \alpha$. Conversely, if $\gamma < \alpha$, then $j(\gamma)=\gamma$ by the induction hypothesis. Since $\gamma \in \alpha$ is the ordinal form of $\gamma<\alpha$, elementarity gives $j(\gamma) \in j(\alpha)$, equivalently $j(\gamma) < j(\alpha)$, so $\gamma \in j(\alpha)$. Therefore $j(\alpha)=\alpha$.
By transfinite induction, $j(\alpha)=\alpha$ for every ordinal $\alpha < \kappa$.
[/step]
[step:Show that bounded subsets of $\kappa$ are not $U$-large]
Let $\beta < \kappa$. For each $\xi \leq \beta$, the singleton $\{\xi\}$ is not in $U$, because $U$ is non-principal. Hence $\kappa \setminus \{\xi\}\in U$ for every $\xi \leq \beta$. Since $\beta+1 < \kappa$ and $U$ is $\kappa$-complete,
\begin{align*}
\bigcap_{\xi \leq \beta}(\kappa \setminus \{\xi\})\in U.
\end{align*}
This intersection is the tail
\begin{align*}
T_\beta := \{\xi < \kappa : \beta < \xi\}.
\end{align*}
Therefore $T_\beta \in U$ for every $\beta < \kappa$. Equivalently, every bounded initial segment of $\kappa$ is outside $U$.
[/step]
[step:Compare the identity representative with all constant representatives below $\kappa$]
Define the identity function
\begin{align*}
\operatorname{id}_\kappa: \kappa \to \kappa,\qquad \xi \mapsto \xi.
\end{align*}
For each ordinal $\beta \leq \kappa$, let $c_\beta: \kappa \to V$ denote the constant function $\xi \mapsto \beta$; in particular, $c_\kappa$ is the constant function with value $\kappa$. By the preceding step,
\begin{align*}
\{\xi < \kappa : c_\beta(\xi) < \operatorname{id}_\kappa(\xi)\}=\{\xi < \kappa : \beta < \xi\}\in U.
\end{align*}
By Łoś's theorem applied to the ordinal-order formula, this gives
\begin{align*}
[c_\beta]_U < [\operatorname{id}_\kappa]_U
\end{align*}
for every $\beta < \kappa$.
Also,
\begin{align*}
\{\xi < \kappa : \operatorname{id}_\kappa(\xi) < c_\kappa(\xi)\}=\kappa\in U,
\end{align*}
so Łoś's theorem gives
\begin{align*}
[\operatorname{id}_\kappa]_U < [c_\kappa]_U=j(\kappa).
\end{align*}
Thus $[\operatorname{id}_\kappa]_U$ is an ordinal of $M$ strictly between every $\beta < \kappa$ and $j(\kappa)$.
[/step]
[step:Conclude that $\kappa$ is the least ordinal moved by $j$]
The previous comparison shows that $j(\kappa)$ has an element, namely $[\operatorname{id}_\kappa]_U$, which is greater than every ordinal $\beta < \kappa$. Since $M$ is transitive and $j(\kappa)$ is an ordinal of $M$, this implies
\begin{align*}
\kappa \leq [\operatorname{id}_\kappa]_U < j(\kappa).
\end{align*}
Therefore $\kappa < j(\kappa)$, so $j(\kappa)\neq \kappa$.
We have already shown that $j(\alpha)=\alpha$ for every ordinal $\alpha < \kappa$, while $j(\kappa)\neq \kappa$. By the definition of the critical point as the least ordinal moved by an elementary embedding,
\begin{align*}
\operatorname{crit}(j)=\kappa.
\end{align*}
[/step]