Erlang Frog River One
-module(frog_river_one).
-export([frog_river_one/2]).

frog_river_one(X, A) ->
    frog_river_one(X, A, 0, sets:new()).

frog_river_one(_X, [], _K, _Seen) ->
    -1;
frog_river_one(X, [H | T], K, Seen) ->
    case H =< X andalso not sets:is_element(H, Seen) of
        true ->
            Seen1 = sets:add_element(H, Seen),
            case sets:size(Seen1) =:= X of
                true -> K;
                false -> frog_river_one(X, T, K + 1, Seen1)
            end;
        false ->
            frog_river_one(X, T, K + 1, Seen)
    end.

This tracks the earliest time each needed position appears and stops as soon as the frog can cross.