#include <bits/stdc++.h>
using namespace std;
ifstream fin("in.in");
ofstream fout("out.out");
const int N = 1e5 + 10;
int n, m, erased[N], cnt[N], rem[N];
vector<int> a[N], v[N];
deque<vector<int> > ind[N];
queue<int> q;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      int x;
      cin >> x;
      a[i].push_back(x);
      if (x != -1)
        v[i].push_back(x);
      else
        erased[j]++;
    }
    sort(v[i].begin(), v[i].end());
    v[i].resize(unique(v[i].begin(), v[i].end()) - v[i].begin());
    vector<int> vec;
    for (int j = 0; j < v[i].size(); j++) ind[i].push_back(vec);
    for (int j = 0; j < m; j++)
      if (a[i][j] != -1)
        ind[i][lower_bound(v[i].begin(), v[i].end(), a[i][j]) - v[i].begin()]
            .push_back(j);
  }
  vector<int> res;
  for (int i = 0; i < m; i++)
    if (erased[i] == n) res.push_back(i + 1);
  while (res.size() < m) {
    for (int i = 0; i < n; i++) {
      if (rem[i] || ind[i].empty()) continue;
      rem[i] = ind[i][0].size();
      for (int j = 0; j < ind[i][0].size(); j++) {
        int k = ind[i][0][j];
        cnt[k]++;
        if (cnt[k] == n - erased[k]) q.push(k);
      }
      ind[i].pop_front();
    }
    if (q.empty()) break;
    while (!q.empty()) {
      int j = q.front();
      q.pop();
      res.push_back(j + 1);
      for (int i = 0; i < n; i++)
        if (a[i][j] != -1) rem[i]--;
    }
  }
  if (res.size() < m)
    cout << -1;
  else
    for (int i = 0; i < res.size(); i++) cout << res[i] << ' ';
  return 0;
}
