#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int X = 0, w = 1;
  char ch = 0;
  while (ch < '0' || ch > '9') {
    if (ch == '-') w = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9')
    X = (X << 3) + (X << 1) + ch - '0', ch = getchar();
  return X * w;
}
map<pair<int, int>, int> pla;
vector<int> ans, mz[100007];
queue<int> q;
int n, m, eot, tot, in[100007 * 3], head[100007 * 3];
struct mmp {
  int to, next;
} e[100007 * 50];
inline void add(int x, int y) {
  eot++;
  in[y]++;
  e[eot].to = y;
  e[eot].next = head[x];
  head[x] = eot;
}
int main() {
  n = read(), m = read();
  tot = m + 1;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      int x = read();
      pair<int, int> z = make_pair(i, x);
      if (x == -1) {
        continue;
      }
      if (pla.find(z) == pla.end()) {
        mz[i].push_back(x);
        pla[z] = tot;
        tot += 2;
      }
      int y = pla[z];
      add(j, y + 1);
      add(y, j);
    }
  }
  for (int i = 1; i <= n; i++) {
    sort(mz[i].begin(), mz[i].end());
    if (mz[i].size() < 2) {
      continue;
    }
    int x = pla[make_pair(i, mz[i][0])], y;
    for (int j = 1; j < (int)mz[i].size(); j++) {
      y = pla[make_pair(i, mz[i][j])];
      add(x + 1, y);
      x = y;
    }
  }
  for (int i = 1; i <= tot; i++) {
    if (!in[i]) {
      q.push(i);
    }
  }
  while (!q.empty()) {
    int x = q.front();
    q.pop();
    if (x <= m) {
      ans.push_back(x);
    }
    for (int i = head[x]; i; i = e[i].next) {
      in[e[i].to]--;
      if (!in[e[i].to]) {
        q.push(e[i].to);
      }
    }
  }
  if ((int)ans.size() < m) {
    puts("-1");
  } else {
    for (int i = 1; i <= m; i++) {
      printf("%d ", ans[i - 1]);
    }
  }
  return 0;
}
