Błąd jest tutaj:
while (nr>=0)
{
nr--;
if (liczba[nr] > m)
m = liczba[nr];
}
Powinno być:
while (nr > 0)
{
nr--;
if (liczba[nr] > m)
m = liczba[nr];
}
bo w poprzedniej wersji indeksujesz po liczba[-1] i odwołujesz się do pamięci spoza tablicy.
Dwa, że m powinieneś zainicjalizować wartością początkową, a skoro szukasz największej liczby spośród wybranych przez użytkownika to wystarczy użyć biblioteki limits w następujący sposób:
int D, m = std::numeric_limits<int>::min();
Oczywiście trzeba załączyć na początku plik nagłówkowy limits