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