Проще, чем это (банально и неинтересно), я придумать не смог.
Используется исходный массив и 3 переменных.
result:=-1;
for i:=0 to n-2 do
for j:=i+1 to n-1 do
if M[i]=M[j] then
begin
result:=M[i];
break;
end;
Есть вариант похитрее и поинтереснее.
Используется также исходный массив и 3 переменных, но цикл, вроде, покороче.
result:=-1;
for i:=0 to n-1 do
begin
if M[i]=-1 then continue;
x:=M[i];
M[i]:=-1;
while x<>i do
begin
if M[x]=-1 then
begin
{число x уже было}
result:=x;
break;
end;
x:=M[x];
M[x]:=-1;
end;
if result>-1 then break;
end;
Пишу вечером, поэтому мог упустить что-то. Возможно его можно оптимизировать.