Uniform prior...
model {
Y <- 100
########################
Y ~ dcat(p[])
# sampling distribution is uniform over first N integers
# use step function to change p[j] to 0 for j>N
for (j in 1:M) {
p[j] <- step(N - j + 0.01)/N
}
N ~ dcat(p.unif[])
for (j in 1:M) {
p.unif[j] <- 1/M
}
}

Data:
list(M = 5000)

   node   mean   sd   MC error   2.5%   median   97.5%   start   sample
   N   1274.0   1295.0   10.86   109.0   722.0   4579.0   1001   10000

Jeffreys prior...
model {
Y <- 100
########################
Y ~ dcat(p[])
# sampling distribution is uniform over first N integers
# use step function to change p[j] to 0 for j>N
for (j in 1:M) {
p[j] <- step(N - j + 0.01)/N
}
N ~ dcat(p.jeffreys[])
for (j in 1:5000) {
reciprocal[j] <- 1/j
p.jeffreys[j] <- reciprocal[j]/sum.recip
}
sum.recip <- sum(reciprocal[])
}

Data:
list(M = 5000)

   node   mean   sd   MC error   2.5%   median   97.5%   start   sample
   N   408.7   600.4   4.99   102.0   197.0   2372.0   1001   10000

Larger upper bound, M...
model {
Y <- 100
########################
Y ~ dcat(p[])
# sampling distribution is uniform over first N integers
# use step function to change p[j] to 0 for j>N
for (j in 1:M) {
p[j] <- step(N - j + 0.01)/N
}
N ~ dcat(p.jeffreys[])
for (j in 1:15000) {
reciprocal[j] <- 1/j
p.jeffreys[j] <- reciprocal[j]/sum.recip
}
sum.recip <- sum(reciprocal[])
}

Data:
list(M =
15000 )

   node   mean   sd   MC error   2.5%   median   97.5%   start   sample
   N   520.2   1146.0   9.852   102.0   200.0   3434.0   1001   10000