#include <bits/stdc++.h>
using namespace std;
vector<vector<int> > B;
vector<vector<pair<int, int> > > A;
set<pair<int, int> > S;
int n, m, Deg[110000], Cnt[110000], Cb[110000], Val[110000];
vector<int> Res;
void inc(int col) {
  S.erase(make_pair(-Deg[col], col)), Deg[col]++,
      S.insert(make_pair(-Deg[col], col));
}
void add(int str) {
  Val[str] = A[str][Cb[str]].first;
  while (A[str][Cb[str]].first == Val[str])
    inc(A[str][Cb[str]].second), Cnt[str]++, Cb[str]++;
}
int main() {
  int i, v, x, j;
  scanf("%d%d", &n, &m);
  A.resize(n), B.resize(n);
  for (i = 0; i < n; i++) A[i].resize(m + 1), B[i].resize(m + 1);
  for (i = 0; i < n; i++)
    for (j = 0; j < m; j++)
      scanf("%d", &x), B[i][j] = x, A[i][j] = make_pair(x, j);
  for (i = 0; i <= m; i++) S.insert(make_pair(0, i));
  for (i = 0; i < n; i++) {
    A[i][m] = make_pair(((int)1e9) + 100, m), sort(A[i].begin(), A[i].end());
    while (A[i][Cb[i]].first == -1) inc(A[i][Cb[i]].second), Cb[i]++;
    add(i);
  }
  while (S.size()) {
    v = S.begin()->second, S.erase(S.begin());
    if (Deg[v] != n) {
      printf("-1\n");
      return 0;
    }
    if (v == m) {
      assert((int)Res.size() == m);
      for (i = 0; i < m; i++) printf("%d ", Res[i] + 1);
      printf("\n");
      return 0;
    }
    Res.push_back(v);
    for (i = 0; i < n; i++)
      if (Val[i] == B[i][v]) {
        Cnt[i]--;
        if (Cnt[i] == 0) add(i);
      }
  }
  assert(0);
  return 0;
}
